明白人给指点一下
1.父类和子类的实例可以互相建立吗
father a = new son 或 son a = new father,两者都正确吗
2.父类创建子类的实例有什么好处
3.子父类之间能相互强转吗
4.父类建立子类的实例或反之,之后的能使用的方法,是不是决定于变量的类型,而不是他所建立的实例
5.不想子类继承父类的方法,是不是在父类的方法前面加final?(这个final是不是对父类的静态方法不好用)

解决方案 »

  1.   

    father a = new son() 这个是正确的
    son a = new father()这个是不正确的
    原因是:子类可以出现在父类能出现的任何地方,反之却不行。
    father a = new son()
    这样写的好处是:当父类引用指向子类对象的时候,就可以写多态了。
    如果不能写多态,面向对象不可能这样流行。
    我也是初学者。我是这样认为的。
      

  2.   

    final和static private用在一起
    没有任何意义
      

  3.   

    继承的机制是面向对象的一个比较高深的机制,要对面向对象有比较深刻的理解。
    一般来说子类的一个实例是父类的一个实例,但是父类的实例不是子类的实例,但是父类的引用可以引用子类实例,但是子类的引用不能引用父类的实例,以此推断Father f=new Son()是正确的,但是Son s=new Father()是错误的。但是为什么要用父类可以指向子类的方式,这是面向对象一个很有用的特性,那就是多态的特性,至于多态特性的美妙之处还是要更多的理解面向对象,更多进行开发才能体会的,说你也不一定明白。
    子类的对象就是父类的对象,所以不用强转可以直接转换,但是反之不行,虽然强转以后编译器不会识别错误,但是运行时就会出错。
    你说的第四条,实力所使用的方法是取决于实例本身,实例属于哪个类他就是使用哪个类的方法,当然子类继承父类以后就会拥有父类的方法。不过在编译器判断语法时是根据引用来判断使用方法的,如果你用父类引用子类实例,编译器只会根据父类引用来判断方法,如果你使用子类独有的方法编译器便会不让你通过编译,在这种情况下会让你产生这种错觉。
    对于不想让子类继承父类的方法有两种方法,一种就是使用final字段,无论是不是static都会不允许继承,另外一种就是把方法设置为private类型,那么同样不允许继承了。
      

  4.   

    Father f=new Son()  OK!!
      

  5.   

    father a = new son ();这个是正确的,但是son a = new father();就不行了
    father a = new son ();这样的好处就是便于将来代码的修改,即维护:建议看看<<java与模式>>
    final 关键字修饰类时,表示这个类不能被继承。
      

  6.   

    father a = new son() 
    这样写的好处是:当父类引用指向子类对象的时候,就可以写多态了。 
    如果不能写多态,面向对象不可能这样流行。 
    ???
    怎么说呢。。能不能说得清楚一点啊...
    或是拿来应用举个例子。。比较好接受一点!!!
    谢谢了
      

  7.   

    有final修饰的类是不能被继承的
      

  8.   

    子类到父类不用强转,父类到子类才要强转。
    final修饰方法是该方法不能被重写而不是不能继承。
      

  9.   

    father f = new sun();正确
    sun  s = new father();不正确
      

  10.   

    子类继承父类就是最大程度的利用代码,简化程序。也正是java多态的体现。
    至于子类与父类的具体关系,关键要理解java面向对象的思想。
    楼上的说的都很对。
      

  11.   

    father f = new sun();  这是可以的
    反之不行
      

  12.   

    1.father a = new son()  正确  
      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()
    ==============
    欢迎高手指正。
      

  13.   

    楼上的javajiu解释的最好了,很详细
    我补充下第五点
    其实这里加private就可以了,所有的private方法都隐式的指定为final,所以private方法添加final没任何意义
      

  14.   

    可以new 一个子类,然后赋给父类的变量,但是反过来不行
      

  15.   

    当然是不可以了,子类可以继承父类的方法包括是public ,默认形式,protected,等形式的方法,
    exam:father s = new son();这是一种多态形式的,可以转型的
      

  16.   

    son f = new father();这是一种不正确的写法,在继承中所有子类都是基于基类的继承,如果没有继承,最原始的就是Object这样一个类了,位于java.lang.object 中的一个类
      

  17.   

    这个有两种方法
          father a=new son()表示的父类指向子类的以个引用
          son s=new son() 这两个方法都可以
     但是 
          son s=new father()那就不正确了