面向对象--多态

public class Extends {
  // 一个对象的实际类型是确定的,但是可以指向的引用类型就不确定了(父类的引用指向了子类)
  public static void main(String[] args) {
      Student s1 = new Student();
      Person s2 = new Student(); // 父类的引用指向了子类
      s1.test();
      s2.test();
  }
}

class Person{
  private String name;
  public void test(){
      System.out.println("Person");
  }
}

class Student extends Person{}

此时s1和s2调用test方法输出的结果都为“Person”

public class Extends {
    // 一个对象的实际类型是确定的,但是可以指向的引用类型就不确定了(父类的引用指向了子类)
    public static void main(String[] args) {
        Student s1 = new Student(); // 子类能调用自己独有或者继承的方法
        Person s2 = new Student(); // 父类的引用指向了子类
        s1.test();
        s2.test(); // 此处便体现了方法的多态
        s2.run(); // run是子类Student独有的方法s2调用会报错
        // 父类型可以指向子类型,但是不能调用子类型独有的方法
    }
}

class Person{
    private String name;
    public void test(){
        System.out.println("Person");
    }
}

class Student extends Person{
    @Override
    public void test() {
       System.out.println("Student");
   }
    public void run(){
        System.out.println("run");
   }
}

上诉代码中当子类Student重写了父类的test方法以后s1和s2调用的test方法都会输出“Student”;
实际类型为Person指向的引用类型为Student的s2调用子类Student独有的run方法是会报错 ,此时只有把s2进行强行转换为Student类型才能调用run方法。

多态:父类的引用指向子类的对象,当方法被重写时,实际类为父类但是指向的类型为子类时(s2),此时执行子类的方法

  1. 多态是方法的多态,属性没有多态
  2. 之间需要存在父子关系
  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象
    注意:static,final,private修饰的方法不能被重写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值