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:你试图访问父对象上的子对象的属性。这就像试图调用
对象上
字符串的属性一样;仅仅因为
视频
是一个
项目
,并不意味着
项目
是一本