多态

多态

Student s1=new Student();
Person s2=new Student();//java中可以通过父类来创建子类
Object s3=new Student();//Object是所有类的父类

对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!

多态注意事项:

  1. 多态是方法的多态,属性没有多态,即子类和父类有相同名称的方法,子类可以重写父类的方法
  2. 父类和子类要有联系,否则会类型转换异常!ClassCastException
  3. 存在条件: 有继承关系,方法需要重写,父类引用指向子类对象! father f1=new Son();

特别的:

  • static关键字 方法属于类,不属于实例,不能重写
  • final (常量)关键字 方法:不能重写
  • private:私有,不能重写

instanceof

用法:

X instanceof Y;

判断X是否为Y类的实例化对象且有继承关系

关键词 instanceof判断一个对象与指定类型是否有关系,返回值为boolean类型

public class Person {
  
}
public class Student extends Person{
}
public class Teacher extends Person {
}

public class Application {
    public static void main(String[] args) {
        Object object = new Student();
        //Object>Person>Student
        //Object>Person>Teacher
        System.out.println(object instanceof Student);
        System.out.println(object instanceof Person);
        System.out.println(object instanceof Object);
        System.out.println(object instanceof Teacher);
        System.out.println(object instanceof String);
    }
}

true true true false false

类型转换

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

public class Application {
    public static void main(String[] args) {

        //低转高,可以自由转换
        Person student = new Student();

        //但是Person类中没有run()方法,需要进行  高转低 的类型转换
        Student student1 = (Student) student;//用一个新的Student类对象存储转换后的
        student1.run();
        
        //也可以不创建对象直接转换
        ((Student)student).run();
    }
}

小结:

  • 父类引用指向子类的对象
  • 把子类转换为父类,向上转型,可以直接转,子类转换为父类可能会丢失子类本身的方法
  • 把父类转换为子类,向下转型,需要强制转换
  • 多态目的是为了方便方法的调用,减少重复的代码
posted @ 2023-07-01 08:58  晚枫zz  阅读(4)  评论(0)    收藏  举报