您的当前位置:首页正文

Java多态、子类父类转换继承

2024-11-29 来源:个人技术集锦

Java多态

案例一:

Student.java 子类
package com.oop.demo06;

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


}
/*
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类要有联系 不能是String Person 两者没有任何关系
 类型转换异常! ClassCastException!
3.存在的条件: 继承关系,方法需要重写,父类引用指向子类对象!
 father f1 = new son()即: Person s2 = new Student();

 1.static 方法,属于类,它属于实例
 2.final 常量
 3.private 方法;
 instanceof (类型转换)引用类型 可以判断一个对象是什么类型
 */
Person.java 父类
package com.oop.demo06;

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

Application.java  应用类
package com.oop;

import com.oop.demo06.Person;
import com.oop.demo06.Student;

public class Application {
   public static void main(String[] args) {
       //一个对象的实际类型是确定的
       //new Student();
       //new Person();

       //可以指向的引用类型就不确定了;父类的引用类型指向子类
       //Studnet 能调用的方法都是自己的或者是继承父类的!
       Student s1 = new Student();
       //person 父类型,可以指向子类,但是不能调用子类独有的方法
       Person s2 = new Student();
       Object s3 = new Student();

       s2.run();//子类重写了父类的方法,执行子类的方法
       s1.eat();
       s1.run();
       ((Student) s2).eat();//父类中没有的方法,子类中有,父类要使用只能把他强制转化为子类的。
    }

}

运行结果:

son
ear
son
ear

案例二

student.java  teacher.java Person.java
package com.oop.demo07;

public class Student extends Person {

}


package com.oop.demo07;

public class Teacher extends Person {
}




package com.oop.demo07;

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

Application.java
package com.oop.demo07;

public class Application {
    public static void main(String[] args) {
        //Object>String
        //Object>Person>Student
        //Object>Person>Teacher
        Object object = new Student();
        //System.out.println(X instanceof Y);
        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false
        System.out.println(object instanceof String);//false
        System.out.println("==================");
        Person person = new Student();
        System.out.println(person instanceof Student);//true
        System.out.println(person instanceof Person);//true
        System.out.println(person instanceof Object);//true
        System.out.println(person instanceof Teacher);//false
        //System.out.println(person instanceof String);//编译报错,person和String没有联系
        System.out.println("==================");
        Student student = new Student();
        System.out.println(student instanceof Student);//true
        System.out.println(student instanceof Person);//true
        System.out.println(student instanceof Object);//true
        //System.out.println(student instanceof Teacher);//编译报错 student和teacher同一等级,两者没有关系
        //System.out.println(student instanceof String); //编译报错 student和string 没有关系。

    }
}
运行结果:
true
true
true
false
false
==================
true
true
true
false
==================
true
true
true

案例三

student.java   person.java
package com.oop.demo07;

public class Student extends Person {
    public void go(){
        System.out.println("go");

    }

}



package com.oop.demo07;

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

Application.java
package com.oop.demo07;

public class Application {
    public static void main(String[] args) {
        //基本类型之间的转换;父  子
        Person obj = new Student();
        //student将这个对象转换为student类型,我们就可以使用student类型的方法了。
        //子类转换为父类,可能丢失自己本来的一些方法!
        Student student = (Student) obj;
        student.go();      //这两句等同于((Student).obj).go();
        //低转高可以自动转,高转低要强制转。
        Person person = student;
    }
}
/*
1.父类引用子类的对象
2.把子类转换为父类,向上转型
3.把父类转换为子类,向下转型。强制转换
4.方便方法的调用,减少重复的代码!简洁

抽象: 封装、继承、多态!接口

 */

显示全文