我创建了3个抽象类:
类文章:母班
public abstract class Article{
//myPrivate Var Declarations
public Article(long reference, String title, float price, int quantity){
this.reference = reference;
this.title = title;
this.price = price;
this.quantity = quantity;
}
}
类Electromenager:文章的孩子
public abstract class Electromenager extends Article{
//myVar declarations
public Electromenager(long reference, String title, float price, int quantity, int power, String model) {
super(reference, title, price, quantity);
this.power = power;
this.model = model;
}
}
类Alimentaire:文章的另一个孩子
public abstract class Alimentaire extends Article{
private int expire;
public Alimentaire(long reference, String title, float price, int quantity,int expire){
super(reference, title, price, quantity);
this.expire = expire;
}
}
让我们假设这些类必须是抽象的,所以基本上在主类中,我不能直接实例化它们的对象,所以我们需要做一些基本的扩展..:
class TV extends Electromenager {
public TV(long reference, String title, float price, int quantity, int power, String model){
super(reference,title,price,quantity,power,model);
}
}
class EnergyDrink extends alimentaire {
public EnergyDrink(long reference, String title, float price, int quantity,int expire){
super(reference,title,price,quantity,expire);
}
}
所以我的混乱开始发生了!在main()中写这个时:
Article art = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
EnergyDrink art2 = new EnergyDrink (155278 , "Eau Miniral" , 6 , 10, 2020);
令人惊讶的是我得到零错误!!!!我不应该输入::
TV art = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
//instead of
Article art = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
为什么两种写作都是正确的? Java编译器如何理解这一点?
答案 0 :(得分:2)
您需要考虑行Article art = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
分两个步骤,
Object
运算符TV
类型new
art
的引用类型变量Article
,并将步骤#1中创建的TV
对象分配给它您正在步骤1中调用TV
类型的有效构造函数,因为Article
是TV
的父级,因此在步骤2中分配也是有效的。
答案 1 :(得分:2)
子类具有其基类的所有功能。
说
Article art = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
你声明 art
作为文章对象,这没有错。您无法在不进行投射的情况下访问仅限电视的功能。
无论如何,创建了一个新的电视对象。如果你施展它:
TV tv = (TV) art;
没有任何问题,您可以访问所有电视功能。
更一般,甚至
Object object = new TV (145278, "OLED TV", 1000 , 1 ,220, "LG");
会起作用。