Java 新<;儿童班>;()和新<;家长阶级>;()?
我是java新手,所以请帮助我理解这一点 e、 g 这三个例子之间有什么区别?我应该什么时候使用每一个 编辑:更正了上一条语句这不会编译Java 新<;儿童班>;()和新<;家长阶级>;()?,java,class,instance,extends,Java,Class,Instance,Extends,我是java新手,所以请帮助我理解这一点 e、 g 这三个例子之间有什么区别?我应该什么时候使用每一个 编辑:更正了上一条语句这不会编译 b z = new a(); 你在这里的意思可能是 a z = new b(); i、 e.将子类对象分配给父类引用以利用多态性 基本上,如果有一个子类型对象被分配给一个超类引用,那么运行时多态性会确保调用该子类型的实例方法版本,也就是说,如果它也在父类中定义,并且您当然希望覆盖它。如果没有,调用将透明地返回到超类版本 作为旁注,请在课堂上使用Capita
b z = new a();
你在这里的意思可能是
a z = new b();
i、 e.将子类对象分配给父类引用以利用多态性
基本上,如果有一个子类型对象被分配给一个超类引用,那么运行时多态性会确保调用该子类型的实例方法版本,也就是说,如果它也在父类中定义,并且您当然希望覆盖它。如果没有,调用将透明地返回到超类版本
作为旁注,请在课堂上使用CapitalCamelCase
。a z=new b()代码>这是运行时多态性
class a{...}
class b extends a{
public static void main(...){
a x = new a();
b y = new b();
a z = new b();
}
ax=新的a()代码>->这是父类的对象
b y=new b()代码>y是子类的对象
az=新的b()代码>z它是引用子实例的父类的对象
假设在父类中有一些函数(hello()),而子类重写了这些函数(hello()),那么z对象使用这些函数();仅在子类中,子类中的其他函数不能用于该对象(z)
点击查看更多信息您可以使用a
作为代码重用方法的参数。也就是说,我们可以定义一个方法(使用参数a
),使其通用于其任何派生类(b
,…)
例如:考虑使用此方法读取流
public void Read(Stream s)
{
//read s
}
现在,您可以对流的所有派生类
重用此方法
Read(new FileStream(PATH));//read File
Read(new NetworkStream(URL));//read url
Read(new MemoryStream(object));//read memory object
首先,请遵循java惯例。类名以大写字母开头,方法/变量名以camle大小写
class A{...}
class B extends A{
public static void main(...){
A x = new A();
B y = new B();
B z = new A(); // will not work
}
语句1和2:ax=newa()代码>&B y=new B()代码>
这是创建对象的正常方式。您有一个指向类型a(同一类)对象的类型a引用。第二个也一样
语句3:bz=newa()代码>
这将不起作用,因为您不能使用子类类型的引用来指向超类的对象,因为您的子类引用可以包含未在超类对象中定义的方法
您可能需要尝试A z=new B()代码>-称为多态性。谷歌搜索更多信息。有很多TUT。3语句将无法编译。您可以为b创建一个实例并将其分配给a。。。a x=新的b()@Juvanis:3rd语句将被编译。@Aniket文章已编辑,请参阅以前的版本。@Juvanis:Ohh!很抱歉我没有注意到。请解释答案,只有链接是不够的,因为将来如果链接无效,那么你的答案就没有用了。因此,如果我理解正确,如果扩展类还有两个新函数,那么z将无法访问这两个函数,因为尽管它指的是扩展类,它仍然是父类的对象,在父类中这些函数不可用。我说得对吗?
class A{...}
class B extends A{
public static void main(...){
A x = new A();
B y = new B();
B z = new A(); // will not work
}