求助大佬

蓦~ 2019-10-08 09:50:47
java萌新,类创建对象过程有点不懂 superclass father = new subclass() 如果new创建对象的方法前后两个类不同(前一个是父类,后一个子类) 那么这个对象会和单独用子类创建对象之间有什么不同呢?另问使用father.方法(父类和子类方法名相同),是使用哪个方法?
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓦~ 2019-12-25
  • 打赏
  • 举报
回复
引用 1 楼 Bangser的回复:
这是多态的提现。即允许将子类类型的指针赋值给父类类型的指针。当使用father.方法时,优先调用子类的实现。如果子类没有该方法,会去找父类的实现
那如果是调用成员变量了
Jaylen_liu 2019-10-14
  • 打赏
  • 举报
回复
要想实例化一个类,必须先实例化其父类。如果没有声明构造方法,编译器会默认调用无参的构造函数。所以这里new SubClass(),也会默认调用父类的无参构造函数。对象实例化后,会拥有一个引用this指向自己,另一个引用super指向父类。因为子类有父类的引用,所以子类拥有父类的一切。 那么将子类赋给父类的引用有什么好处呢?比如一个方法需要一个对象作为参数,但传入的类型不确定,这时候我们可以声明为Object。所有的其他类都是Object的子类,所以都可以传进去。其实这里已经使用了多态。同理,现在不想参数的范围那么大,我只需要一个Animal类(限制传入参数的类型可以使用泛型),那么Animal及其子类都可以传入(就和Object和其子类一样)。对于Object来说,是范围变小了,但是对于一个具体类来说,这个类的功能就大大加强了。毕竟可以处理这么多类型的参数。 父类通常的功能都是少于子类的,如果类型为父类型,那么子类新增的方法都是无法调用的。因为父类型下没有这些方法,可以通过类型转换后,进行方法调用。 总结,使用父类作为变量类型,可以在变量赋值、传参时具有更大的灵活性,更大的使用范围。但是只能看到父类的基础方法。
Faxon 2019-10-09
  • 打赏
  • 举报
回复
这是多态的提现。即允许将子类类型的指针赋值给父类类型的指针。当使用father.方法时,优先调用子类的实现。如果子类没有该方法,会去找父类的实现
hurtCat 2019-10-09
  • 打赏
  • 举报
回复
这是多态,即父类引用指向子类对象,其中superclass是father的静态类型,subclass是father的动态类型。father只能调用属于superclass的方法(包括superclass继承的方法)。调用成员方法看动态类型,优先调用子类中重写的方法,调用静态方法和变量看静态类型。
哈希塞特 2019-10-09
  • 打赏
  • 举报
回复
能调什么看父类,执行什么看子类

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧