java中新建对象的问题
本人刚学Java不久,有个问题一直不清楚,比如有几个类,一个父类Fruit,子类有Apple,Pear,Watermelon。那么Fruita=newFruit,Frui...
本人刚学Java不久,有个问题一直不清楚,比如有几个类,一个父类Fruit,子类有Apple,Pear,Watermelon。那么Fruit a = new Fruit ,Fruit b = new Apple ,Apple c = new Apple ,这三个对象a,b,c有什么区别?
展开
2个回答
展开全部
在Java中,多态的体现有两种方式,一是体现在父子类中,二是体现中方法的重载中。
上面的问题,是Java典型的一种多态的体现。
三个对象的区别如下:
1、a对象是直接通过Fruit父类自身实例化的,实例a时只需调绝枝用一次Fruit的无参构造函数,a对象能够访问Fruit类中的所有成员属性及成员函数,不能访问子类的。
2、b对象是通过子类Apple实例化的,这就是多态的体现,通过子类实例化父类,并向上转型,实例b对象时,调用了两次构造方法,首先是调用父类Fruit的构造方法,再调用子类Apple的构造方法。b对象与上面的a对象一样,能够访问Fruit类中的所有扒宏此成员属性及成员函数,不能访问子类的。
3、c对象是Apple类直接实例化自身,跟b对象一样,实例时也调用了两次构造方法,先是调用父类Fruit的构造方法春迅,再调用自身的构造方法。c对象与a、b对象不一样的地方是:c对象可以访问Fruit类中的所有成员属性及成员函数及自身的成员属性与函数。
楼主可回顾下Java中类的继承与实现,多态的体现这节。
有问题欢迎提问,满意请采纳,谢谢!
上面的问题,是Java典型的一种多态的体现。
三个对象的区别如下:
1、a对象是直接通过Fruit父类自身实例化的,实例a时只需调绝枝用一次Fruit的无参构造函数,a对象能够访问Fruit类中的所有成员属性及成员函数,不能访问子类的。
2、b对象是通过子类Apple实例化的,这就是多态的体现,通过子类实例化父类,并向上转型,实例b对象时,调用了两次构造方法,首先是调用父类Fruit的构造方法,再调用子类Apple的构造方法。b对象与上面的a对象一样,能够访问Fruit类中的所有扒宏此成员属性及成员函数,不能访问子类的。
3、c对象是Apple类直接实例化自身,跟b对象一样,实例时也调用了两次构造方法,先是调用父类Fruit的构造方法春迅,再调用自身的构造方法。c对象与a、b对象不一样的地方是:c对象可以访问Fruit类中的所有成员属性及成员函数及自身的成员属性与函数。
楼主可回顾下Java中类的继承与实现,多态的体现这节。
有问题欢迎提问,满意请采纳,谢谢!
追问
那在实际运用中a对象和b对象有哪些区别?我意思就是既然一个是通过Fruit自身实例化的,一个是通过子类实例化的都是只能访问父类的属性及函数,那不是都是一样的作用吗?为什么要这样分两种。还有个问题就是是不是还有个像下转型?是不是向下转型是不安全的?
追答
a和b的区别是:
1、实例a只需调用一次构造方法,而b调用两次构造方法,这点上面有提到。
2、b调用自身的方法时,如果该方法被子类覆写过,则显示的实际内容是子类中所实现的内容,这是关键点,也是多态的体现,这点a对象是没有的。
3、对的,向下转型是不安全的,向上则是安全的。
现在明白了吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询