java中父类对象对子类对象的应用有什么好处

2024-12-21 19:16:56
推荐回答(4个)
回答1:

 class Test {
  public static void main(String[] args) {
  superA a = new superA();
  subB b = new subB();
  subC c = new subC();
  a = b;
  a.fun(100);
  a = c;
  a.fun(200);
  }
  }
  /*
  * 上述代码中subB和subC是超类superA的子类,我们在类Test中声明了3个引用变量a, b,
  * c,通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。也许有人会问:
  * "为什么(1)和(2)不输出:This is superA"。
  * java的这种机制遵循一个原则:当超类对象引用变量引用子类对象时,
  * 被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,
  * 但是这个被调用的方法必须是在超类中定义过的,
  * 也就是说被子类覆盖的方法。
  * 所以,不要被上例中(1)和(2)所迷惑,虽然写成a.fun(),但是由于(1)中的a被b赋值,
  * 指向了子类subB的一个实例,因而(1)所调用的fun()实际上是子类subB的成员方法fun(),
  * 它覆盖了超类superA的成员方法fun();同样(2)调用的是子类subC的成员方法fun()。
  * 另外,如果子类继承的超类是一个抽象类,虽然抽象类不能通过new操作符实例化,
  * 但是可以创建抽象类的对象引用指向子类对象,以实现运行时多态性。具体的实现方法同上例。
  * 不过,抽象类的子类必须覆盖实现超类中的所有的抽象方法,
  * 否则子类必须被abstract修饰符修饰,当然也就不能被实例化了
  */
  以上大多数是以子类覆盖父类的方法实现多态.下面是另一种实现多态的方法-----------重写父类方法
  1.JAVA里没有多继承,一个类之能有一个父类。而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。举例说明:
  //父类
  public class Father{
  //父类有一个打孩子方法
  public void hitChild(){
  }
  }
  //子类1
  public class Son1 extends Father{
  //重写父类打孩子方法
  public void hitChild(){
  System.out.println("为什么打我?我做错什么了!");
  }
  }
  //子类2
  public class Son2 extends Father{
  //重写父类打孩子方法
  public void hitChild(){
  System.out.println("我知道错了,别打了!");
  }
  }
  //子类3
  public class Son3 extends Father{
  //重写父类打孩子方法
  public void hitChild(){
  System.out.println("我跑,你打不着!");
  }
  }
  //测试类
  public class Test{
  public static void main(String args[]){
  Father father;
  father = new Son1();
  father.hitChild();
  father = new Son2();
  father.hitChild();
  father = new Son3();
  father.hitChild();
  }
  }
  都调用了相同的方法,出现了不同的结果!这就是多态的表现!

回答2:

重载,多态,重写方法,继承这些就是面向对象得编成,在代码中抽取重复代码变为父类等等。好处多了。

回答3:

加强了代码的重用性,也就是我们少写了很多的重复代码。

回答4:

可重用性