明白人给指点一下
1.父类和子类的实例可以互相建立吗
father a = new son 或 son a = new father,两者都正确吗
2.父类创建子类的实例有什么好处
3.子父类之间能相互强转吗
4.父类建立子类的实例或反之,之后的能使用的方法,是不是决定于变量的类型,而不是他所建立的实例
5.不想子类继承父类的方法,是不是在父类的方法前面加final?(这个final是不是对父类的静态方法不好用)
1.父类和子类的实例可以互相建立吗
father a = new son 或 son a = new father,两者都正确吗
2.父类创建子类的实例有什么好处
3.子父类之间能相互强转吗
4.父类建立子类的实例或反之,之后的能使用的方法,是不是决定于变量的类型,而不是他所建立的实例
5.不想子类继承父类的方法,是不是在父类的方法前面加final?(这个final是不是对父类的静态方法不好用)
解决方案 »
- java 串口配置问题
- C o m p a r a t o r C o m p a r a b l e在使用的时候是否需要重写某些
- 招收有至于JAVA方面学习的爱好者或是高手
- java的applet问题?
- 关于connection,statement,resultset接口的实现?
- 关于消息传递
- 100分求助关于applet的小问题!^oo^~~~~~
- SOS,在线等待。关于有Relationship的Entiry Bean,remove Method
- Double類的兩個方法怎麼用
- Java菜鸟求助
- 用过ThreadPoolExecutor的人,该怎么设计?
- 如何用java for循环 实现用*打印出个圆形
son a = new father()这个是不正确的
原因是:子类可以出现在父类能出现的任何地方,反之却不行。
father a = new son()
这样写的好处是:当父类引用指向子类对象的时候,就可以写多态了。
如果不能写多态,面向对象不可能这样流行。
我也是初学者。我是这样认为的。
没有任何意义
一般来说子类的一个实例是父类的一个实例,但是父类的实例不是子类的实例,但是父类的引用可以引用子类实例,但是子类的引用不能引用父类的实例,以此推断Father f=new Son()是正确的,但是Son s=new Father()是错误的。但是为什么要用父类可以指向子类的方式,这是面向对象一个很有用的特性,那就是多态的特性,至于多态特性的美妙之处还是要更多的理解面向对象,更多进行开发才能体会的,说你也不一定明白。
子类的对象就是父类的对象,所以不用强转可以直接转换,但是反之不行,虽然强转以后编译器不会识别错误,但是运行时就会出错。
你说的第四条,实力所使用的方法是取决于实例本身,实例属于哪个类他就是使用哪个类的方法,当然子类继承父类以后就会拥有父类的方法。不过在编译器判断语法时是根据引用来判断使用方法的,如果你用父类引用子类实例,编译器只会根据父类引用来判断方法,如果你使用子类独有的方法编译器便会不让你通过编译,在这种情况下会让你产生这种错觉。
对于不想让子类继承父类的方法有两种方法,一种就是使用final字段,无论是不是static都会不允许继承,另外一种就是把方法设置为private类型,那么同样不允许继承了。
father a = new son ();这样的好处就是便于将来代码的修改,即维护:建议看看<<java与模式>>
final 关键字修饰类时,表示这个类不能被继承。
这样写的好处是:当父类引用指向子类对象的时候,就可以写多态了。
如果不能写多态,面向对象不可能这样流行。
???
怎么说呢。。能不能说得清楚一点啊...
或是拿来应用举个例子。。比较好接受一点!!!
谢谢了
final修饰方法是该方法不能被重写而不是不能继承。
sun s = new father();不正确
至于子类与父类的具体关系,关键要理解java面向对象的思想。
楼上的说的都很对。
反之不行
son a = new father() 不正确
这种将某个对象的引用视为其基类型的引用的做法成为“向上转型”,因为在继承树中,基类是位于最上方的。
2.Java的多态性不但能够改善代码的组织结构和可读性,还能够创建“可扩展的”程序,即无论在最初创建时还是在需要添加新功能时,都能进行扩充。(father一般会声明为抽象类(abstract),而son1、son2、son3...则继承father类)
3.子类的对象就是父类的对象,所以不用强转可以直接转换。父类的对象强制转换为子类的对象则涉及到Java的“运行期类型识别”(RTTI)行为。
class father{
public void born();
}class son extends father{
public void born();
public void fly();
}public class RTTI{
public static void main(String[] args){
father[] a={new father,new son};
a[0].born;
//!a[0].fly();
//!a[1].fly();
((son)a[0]).fly;//向下转型
((son)a[1]).fly;//RTTI
}
}
如果转型失败,则返回一个ClassCashException异常。
4.father a = new son();
a.born();//我们可能认为是调用的father的born(),而实际上由于Java动态绑定机制(运行时根据对象a的类型进行绑定)
还是正确的调用了son的born()
==============
欢迎高手指正。
我补充下第五点
其实这里加private就可以了,所有的private方法都隐式的指定为final,所以private方法添加final没任何意义
exam:father s = new son();这是一种多态形式的,可以转型的
father a=new son()表示的父类指向子类的以个引用
son s=new son() 这两个方法都可以
但是
son s=new father()那就不正确了