Java面向对象(4)
面向对象-多态
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类有联系无联系则产生异常 类型转换异常:ClassCastException
3.多态存在条件:继承关系 方法要重写 父类引用指向子类对象 (father f1 = new son;)
1.static 方法 属于类 不属于实例
2.final 常量;
3.private方法 私有的
Instanceof (类型转换)引用类型,判断一个对象是什么类型
1.父类引用指向子类对象
2.把子类转换为父类,向上转型 易丢失一些方法
2.把父类转换为子类,向下转型 需要强制转换
4.方便方法的调用 减少重复代码
5.抽象:封装 继承 多态 抽象类 接口
代码中类的关系:
// Object -> Person -> Student
// Object -> Person -> Teacher
// Object -> String
公式System.out.println(X Instanceof Y);
main方法1
package oop;
import com.oop.Demo06.Person;
import com.oop.Demo06.Student;
public class Application {
public static void main(String[] args) {
// 一个对象的实际类型是确定的
// new Student();
// 可以指向的引用类型是不确定的,父类的引用指向子类
// Student 能调用的方法-> 自己的或集成父类的
Student s1 = new Student();
// Person父亲类 可以指向子类,但不能调用子类独有的方法
Person s2 = new Student();
Object s3 = new Student();
// 对象能执行哪些方法 主要看对象左边类型 和右边关系不大
s2.run();// 子类重写了父类的方法 执行子类
s1.run();
((Student)s2).eat();// 类型转换
}
}
main方法2
package oop;
import com.oop.Demo06.Person;
import com.oop.Demo06.Student;
import com.oop.Demo06.Teacher;
public class Application {
public static void main(String[] args) {
// 类型之间的转化: 基本类型转化 高低 64 -> 32 -> 16 -> 8
// 父 -> 子 Person -> Student 高 -> 低
Person student = new Student();
// 将Person类型对象student转换为Student类型:
/*Student student1 = (Student) student;
((Student) student).go();*/
// 或 ((Student)studnet).go;
// 子类转换为父类可能丢失自己本来的一些方法
/*
Student Ming = new Student();
Ming.go();
Person person = Ming;
person.go;
*/
}
}
父类
package com.oop.Demo06;
public class Person {
public void run(){
System.out.println("Run");
}
}
子类
package com.oop.Demo06;
public class Student extends Person{
@Override
public void run() {
System.out.println("Rua");
}
public void eat(){
System.out.println("muamua");
}
}