Java 扩展另一类的类中的可变不可见性
我有两门课:Java 扩展另一类的类中的可变不可见性,java,class,polymorphism,Java,Class,Polymorphism,我有两门课:book和video,这两门课都是扩展项: class item { int item_num; String title; } class video extends item { double length; char rating; } class book extends item { String author; int year; } 我有一个值的文本文件,需要插入到项的列表中。文本文件如下所示: v 382
book
和video
,这两门课都是扩展项
:
class item {
int item_num;
String title;
}
class video extends item {
double length;
char rating;
}
class book extends item {
String author;
int year;
}
我有一个值的文本文件,需要插入到项的列表中。文本文件如下所示:
v 382 Armageddon 120 P
v 281 Scream 138 R
b 389 Othello Shakespeare 1603
v 101 Cellular 110 P
b 482 Hatchet Paulson 1987
以及如何读取文件:
list<item> theList;
item newItem;
while(true) {
if(file.isEOF) { break; }
if(file.getChar == 'v') {
newItem = new video();
/* the get___ methods below grab the next value
* in the file. Values tab delimited */
newItem.item_num = file.getInt();
newItem.title = file.getString();
newItem.length = file.getDouble();
newItem.rating = file.getChar();
} else if (file.getChar == 'b') {
newItem = new book();
newItem.item_num = file.getInt();
newItem.title = file.getString();
newItem.author = file.getString();
newItem.year = file.getInt();
}
theList.add(newItem);
}
列出列表;
项目新项目;
while(true){
if(file.isEOF){break;}
如果(file.getChar==“v”){
newItem=newvideo();
/*下面的get_u_;方法获取下一个值
*在文件中。值选项卡用分隔符分隔*/
newItem.item_num=file.getInt();
newItem.title=file.getString();
newItem.length=file.getDouble();
newItem.rating=file.getChar();
}else if(file.getChar=='b'){
newItem=新书();
newItem.item_num=file.getInt();
newItem.title=file.getString();
newItem.author=file.getString();
newItem.year=file.getInt();
}
添加列表(新项);
}
Netbeans弹出一个错误,即书籍
和视频
变量不在类项
中
为什么扩展项的类中的变量不可见?如何访问这些变量?父类无法知道其子类的字段是什么。为了获得对这些字段的正确访问,您不需要实例化项
,而是分别实例化视频
和书籍
,然后将它们添加到列表中。这也意味着不能在两个if
语句的末尾都使用add
方法,因为它们需要添加到if
s中
由于它是一个混合层次结构集合,您可以编写List父类无法知道其子类的字段是什么。为了获得对这些字段的正确访问,您不需要实例化项
,而是分别实例化视频
和书籍
,然后将它们添加到列表中。这也意味着不能在两个if
语句的末尾都使用add
方法,因为它们需要添加到if
s中
由于它是一个混合层次结构集合,您可以编写List问题是newItem
的类型是item
。而书籍
和视频
都是项目
,反之则不成立
如果希望编译器看到子类中声明的变量,则需要在访问其变量之前将newItem
强制转换为相应的子类。每次需要时都可以这样做,但最好是说book b=newbook()
,而不是item newItem=newbook()
问题是newItem
属于item
类型。而书籍
和视频
都是项目
,反之则不成立
如果希望编译器看到子类中声明的变量,则需要在访问其变量之前将newItem
强制转换为相应的子类。这可以在每次需要的时候完成,但最好是说book b=newbook()
,而不是item newItem=newbook()
关于多态性,我遇到的一个常见例子是动物类,它扩展了狗,猫,等等。它们实例化了dog
和cat
像animalvar=newdog()
。我所做的也没什么不同,不是吗?@gator:你试图访问父对象上的子对象的属性。这就像试图调用对象上字符串的属性一样;仅仅因为视频
是一个项目
,并不意味着项目
是一本书
。我遇到的一个关于多态性的常见例子是动物
类,它扩展了狗
,猫
,等等。它们实例化了dog
和cat
像animalvar=newdog()
。我所做的也没什么不同,不是吗?@gator:你试图访问父对象上的子对象的属性。这就像试图调用对象上字符串的属性一样;仅仅因为视频
是一个项目
,并不意味着项目
是一本书
。