Jor*_*der 7 java oop inheritance
简而言之,这是如何以及为什么可能:
Object obj=new MyClass();
Run Code Online (Sandbox Code Playgroud)
Object是所有对象的超类,因此MyClass是Object的子类.通常,在Java中,为什么可以在父类中使用子类的构造函数?
我理解它是如何反过来的,因为子类具有父类的所有变量/方法,所以当你初始化它们时,你只是初始化在父构造函数中指定的变量,它在子节点中按照定义存在.问题是,当你走另一条路时,它不一定是真的.一个子节点可以有父节点不具有的变量,那么如果父节点首先没有变量,那么如何将子构造函数与父节点一起使用呢?
该功能在开发中有什么用途?我认为如果你想要一个B类的实例,你会把它声明为B thing = new B(),而不是A thing = new B().这可能是我缺乏经验的谈话,所以我很感激启发为什么以及如何将父类初始化为其子女之一.
为什么可以在父类中使用子类的构造函数?
这是不正确的.当你这样做
Object obj = new MyClass();
Run Code Online (Sandbox Code Playgroud)
Object obj;声明类型的引用Object
并new MyClass();返回对其创建的对象的引用.
因此,您正在实例化a MyClass并将对创建的对象的引用分配给该类型的引用Object,这是可能的,因为它MyClass是一个Object.
正如你所说,
孩子可以拥有父母没有的变量
这称为扩展父功能(继承).
对于您的第二个问题,请考虑一个经典Animal示例:假设您创建了一个Animal类,并makeSound()在其上创建了一个方法.
现在,您创建的两个子类Animal,Dog并且Cat,它覆盖makeSound()的方法Animal(一Dog树皮和Cat叫声).
想象一下,你使用a 代表一个充满Animals(Dogs和Cats)的房间List,你想要制作所有这些房间makeSound().您的列表将被声明为List<Animal>因为您不知道Animal将要存储的s 类型.
然后你迭代List调用makeSound()每个Animal.无论Animal是a Dog还是a Cat,它都会发出声音.
然后想象你想要添加Birds List.容易,不是吗?
| 归档时间: |
|
| 查看次数: |
4240 次 |
| 最近记录: |