2012-02-26 34 views
7

Tôi hiện đang trong quá trình phát triển cơ chế tạo nhân vật cho trò chơi văn bản dựa trên Java nhưng tôi đã gặp sự cố và không thể thấy nơi tôi có thể đã sai. Tôi có một lớp "Character", đó là trừu tượng và sau đó là một lớp khác, "NPCharacter" có nghĩa là xây dựng trên đầu trang này.Vấn đề trừu tượng/mở rộng Java

public abstract class Character { 
    public abstract void generateStats(); 
} 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 

Eclipse nói rằng "Loại NPCharacter không thể phân lớp nhân vật cuối cùng". Có ai thấy lỗi ở đây không?

Xin cảm ơn trước.

Trả lời

8

Trình biên dịch gây nhầm lẫn cho Character của bạn với java.lang.Character. Chỉ cần sử dụng một gói và đảm bảo bạn nhập Character của mình.

package com.foo; 

public abstract class Character { 
    public abstract void generateStats(); 
} 

import com.foo.Character; 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 
1

Character là một lớp tiêu chuẩn trong gói java.lang, được tự động nhập vào mọi lớp. Chọn một tên khác cho lớp tùy chỉnh của bạn.

0

Vui lòng kiểm tra bạn hàng nhập khẩu. Có vẻ như NPCharacter cố gắng mở rộng một lớp khác có tên là Ký tự (có thể là một từ thư viện chuẩn, mà thực sự có thể là cuối cùng).

Ưu tiên đề cập đến lớp nhân vật của bạn theo tên đầy đủ của nó, tức là {name} gói .Character

2

Vấn đề là Character là một lớp trong gói java.lang, và bạn không thể mở rộng nó bởi vì nó là chính thức. Bạn nên đổi tên lớp Character và/hoặc kiểm tra các câu lệnh nhập của mình: bạn có xung đột tên.

2

Trình biên dịch nói rằng bạn không thể mở rộng lớp java.lang.Character, đây là lớp học final không thể được phân loại. (Các lớp trong gói java.lang được nhập hoàn toàn vào tất cả các tệp nguồn Java.)

Mặc dù lớp NPCharacter có ý định mở rộng lớp trừu tượng Character, trình biên dịch không thể phân biệt được giữa hai lớp.

Bạn sẽ phải sử dụng tên lớp đủ điều kiện của lớp trừu tượng Character hoặc nếu không thể (do nó không thuộc bất kỳ gói nào), bạn sẽ không có bất kỳ lựa chọn nào khác ngoài đổi tên Character lớp trừu tượng.

Nhưng tốt hơn, hãy đổi tên lớp trừu tượng Character thành thứ gì đó không xung đột với tên của lớp trong gói java.lang, vì điều đó có thể gây nhầm lẫn cho những người đọc mã của bạn.

0

Mã của bạn có vẻ OK. Bạn có chắc chắn rằng lớp NPCharacter của bạn thực sự cố gắng mở rộng lớp Nhân vật chính xác và không phải lớp khác (từ một gói khác) như ví dụ: java.lang.Character?

Các vấn đề liên quan