当前位置: 代码迷 >> J2SE >> java继承的有关问题
  详细解决方案

java继承的有关问题

热度:113   发布时间:2016-04-24 01:23:00.0
java继承的问题,在线等
java文件中


假设

class B extends A 


现问 

1 下面的写法都对吗,

A a=new B();

B b=new B();

2 这二种写法有何不同?

thanks


------解决方案--------------------
都对 引用变量的类型不一样呗
------解决方案--------------------
个人认识,不知对否

如果B类里面有个方法 hello(), A类里面没有这个方法

那么a,b这两个对象a不能调用hello()方法,而b能调用hello()方法。
------解决方案--------------------
两种写法都对 第一种是多态的做法 第二种是普通的实例化类
------解决方案--------------------
探讨
两种写法都对 第一种是多态的做法 第二种是普通的实例化类

------解决方案--------------------
探讨
两种写法都对 第一种是多态的做法 第二种是普通的实例化类

------解决方案--------------------
探讨

第一种继承A的所有方法和属性 第二种只有B的属性和方法
对吗

------解决方案--------------------
面向接口的编程
------解决方案--------------------
两种写法都是对的。区别就是:
如果A中的方法被B重写了,那么对象a和b调用的都是B中的方法,如果没有重写,显然调用的都是A中的。
B中独立定义的方法(即A中没有),对象a是无法调用的。
------解决方案--------------------
探讨
两种写法都对 第一种是多态的做法 第二种是普通的实例化类

------解决方案--------------------
两种方法都对!
第一种体现了java中的多态 提高了代码的利用率
比如你还创建了一个类
class C extents A
那你就可以这样做
A a=new B;
....(B的实例)
a=new C;
....(C的实例)
------解决方案--------------------
Java code
A a = new B(); // 1B b = new B(); // 2
------解决方案--------------------
两种都对,
B b=new B();
是将B类型的变量b指向一个B类型实例。(Java里的引用型变量实质上就是指针,如果不学C/C++的话可以不考虑到这层)
A a=new B();
是将A类型的变量a指向一个B类型实例。对于A是B的基类的情况是可以的,这种操作也叫装箱。
可以把变量a、b理解成用于放物体的箱子,而B类型在内存中的实例则是可以放入箱子中的物体。
B b=new B();
可以理解成把一个实际的物体放入b这个箱子里,B b=null;就是买了个空箱子,里面什么都没放。

B是A的子类可以理解成B类型箱子可以放入A类型的箱子,那可以放入B类型箱子的物体new B()自然可以放入A类型的箱子a里了。
------解决方案--------------------
A a=new B();//用子类实例化父类声明,a只具有A类所有的方法与变量,但是都是B类复写的

B b=new B();//只是一般的对象实例化
------解决方案--------------------
A a=new B();创建一个A类的对象但new的是B类里的东西
B a=new B();创建一个B类的对象new的是B类里的东西
------解决方案--------------------
两种方法都对,有一种面向接口的编程方式,而且还提倡用多态,所以第一种还是比较常用的
------解决方案--------------------
都一样。第一个进口回调技术,第2个实现接口累的对象初始化 普通实例化
------解决方案--------------------
都对 前面已经说到了!
第一种是多态的做法 第二种是普通实例化类
 第一种方法中:1、父类是引用子类实例化对象 以实现父类中的方法,一般用在抽象类和接口中(因为抽象类和接口是不能直接实例化的)
2、如果父类中的(非static)方法被子类重写了 那么调用的就是子类重写后的方法
3、如果父类中的方法是static类型的那么即使被子类重写了还是用父类中的方法
第二种方法中:1、子类能调用自身的方法和父类中非私有方法
2、如果想要调用已经被重写过的方法就得通过super
------解决方案--------------------
A a=new B();
如果要通过a来调用B中特有而A中没有的方法,则失败
如果要通过a来调用B中覆盖重写了A中也有的方法,则成功,体现多态
------解决方案--------------------
都对。举个简单的例子:
一个Son类,一个Father类,Son继承自Father 你可以把上述两个对应到人上。
Father f = new Father();
Father f1 = new Son();
Son s = new Son();