new <childclass>()和new <parentclass>()有什么区别?</parentclass> </childclass>

时间:2013-09-13 06:29:44

标签: java class instance extends

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

e.g

class a{...}
class b extends a{
   public static void main(...){
      a x = new a();
      b y = new b();
      a z = new b();
    }

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

编辑:更正了最后一句话

4 个答案:

答案 0 :(得分:3)

您可以使用a作为代码重用的方法的参数。即我们可以定义一个方法(带参数a),以便它可以使用任何派生类(b,..)


例如:考虑使用此方法来读取流

public void Read(Stream s)
{
   //read s
}

现在,您可以将此方法重用于deriving

的所有Stream
Read(new FileStream(PATH));//read File
Read(new NetworkStream(URL));//read url
Read(new MemoryStream(object));//read memory object

答案 1 :(得分:1)

这不会编译

b z = new a();

你在这里的意思是

a z = new b();

即。将子类对象分配给父类引用以使用多态

基本上,如果你有一个分配给超类引用的子类型对象,运行时多态确保实例方法的子类型版本得到调用ie,如果它已在父类中定义,并且您希望覆盖它当然。如果没有,则呼叫将透明地回溯到超类版本。

作为旁注,请为课程使用CapitalCamelCase

答案 2 :(得分:1)

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();
    }

a x=new a(); - &gt;这是父类的对象。

b y =new b(); y是子类的对象。

a z=new b(); z它是父类的对象,用于引用子实例

假设你在父类中有一些函数(hello())并且子类覆盖了函数(hello()),那么你的z对象就会使用那些函数();只有在子类中,子对象内的其他函数才能用于该对象(z)。

点击link了解详情

答案 3 :(得分:0)

首先请遵循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&amp; 2:A x = new A();&amp; B y = new B(); 这是创建对象的常规方法。你有一个类型A的引用指向类型A的对象(相同的类)。第二个也是如此。

声明3:B z = new A(); 这不起作用,因为你不能使用子类类型的引用来指向超类的对象,因为你的子类引用可以有你的超类对象中没有定义的方法。

您可能想尝试A z = new B(); - 它被称为多态性。谷歌这个词的更多信息。那里有很多东西。