Java 新<;儿童班>;()和新<;家长阶级>;()?

Java 新<;儿童班>;()和新<;家长阶级>;()?,java,class,instance,extends,Java,Class,Instance,Extends,我是java新手,所以请帮助我理解这一点 e、 g 这三个例子之间有什么区别?我应该什么时候使用每一个 编辑:更正了上一条语句这不会编译 b z = new a(); 你在这里的意思可能是 a z = new b(); i、 e.将子类对象分配给父类引用以利用多态性 基本上,如果有一个子类型对象被分配给一个超类引用,那么运行时多态性会确保调用该子类型的实例方法版本,也就是说,如果它也在父类中定义,并且您当然希望覆盖它。如果没有,调用将透明地返回到超类版本 作为旁注,请在课堂上使用Capita

我是java新手,所以请帮助我理解这一点

e、 g

这三个例子之间有什么区别?我应该什么时候使用每一个

编辑:更正了上一条语句

这不会编译

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
    }