一、多态
1、它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为(简单来说就是在继承上的更多分类)
具体情况如例:
public class People {
public void run() {
System.out.println("跑步中");
}
}
class Student extends People {
public void run() {
System.out.println("学生在跑步");
}
public void walk() {
System.out.println("学生在走路");
}
}
public class PeopleTest {
public static void main(String[] args) {
People s1 = new Student(); //对象的引用类型为父类
Student s2 = new Student(); //对象的引用类型为子类
s1.run(); //调用父类的run方法
s2.run(); //调用子类的run方法
s2.walk(); //调用子类的walk方法
s1.walk(); //调用父类的walk方法
}
}
会发现,s1.walk()报错
因为s1引用父类,而People里面没有walk方法
因此可以得知,对象的引用类型看左边。
总结:
1、子类可以调用自己或父类的方法
2、父类不可以调用子类独有的方法
3、如果子类重写了父类(子类父类方法名相同但方法体内容不同),那调用时优先调用子类重写后的方法
二、instanceof关键字
一种双目运算符,用于判断对象是否为一个类的实例
语法:
System.out.println(对象 instanceof 类);
//结果为true或者false
如果对象的引用类型与这个类无关,则会报错
三、对象类型转换
向下转型:(指子类对象指向父类引用,把父类转向子类)
语法:
父类 对象1 = new 子类(); //向上转型
子类 对象2 = (父类)对象1; //向下转型
那么对象1的引用类型是父类,对象2的引用类型是子类
如果想要强制转换:
((子类)对象).子类的方法;
四、抽象类
用abstract修饰
语法:
public abstract class 类名{ //抽象类
public abstact void 方法名(); //抽象方法,让别人帮忙实现
}
注意:
1、抽象方法必须在抽象类中
2、子类重写父类时,必须补充父类的全部抽象方法
零碎的知识:
同一个java源文件只能有一个类是被public修饰的
在一个文件中,可以不存在与文件同名的类(前提是此文件中没有public类