多态是指同一个实体同时具有多种形式
主要是指同一个对象,在不同的时刻,代表的对象不同,指的是对象的多种形态
多态特点:
1.多态的前提是继承
2.要有方法的重写
3.父类引用指向子类对象 Animal a =new Dog();–小到大,向上转型
多态中,编译看左边 运行看右边
public class Test5_Duotai {
public static void main(String[] args) {
//创建多态对象 父类引用指向子类对象
Father f=new Son();
f.eat();
}
}
class Father{
public void eat() {
System.out.println("香蕉");
}
}
//多态前提1:继承
class Son extends Father{
//多态前提2:重写
public void eat() {
System.out.println("苹果");
}
}
抽象类
java中可以定义没有方法体的方法,该方法由其子类来具体实现。该没有方法体的方法我们称之为抽象方法。含有抽象方法的类我们称为抽象类。抽象类可以理解为一个只有方法声明没有方法体的特殊类。
修饰符 abstract 返回值 方法名 (参数列表);
特点:
1.通过java关键字abstract实现
2.可以修饰方法或者类
3.抽象类中可以没有抽象方法(由子类去实现)
4.如果类中有抽象方法,那该类必须定义为一个抽象类
5.子类继承了抽象类以后,要么还是一个抽象类,要么就把所有的抽象方法都重写
6.多用于多态中
7.抽象类不可以被实例化
public class Test1_Abstract {
public static void main(String[] args) {
Fu f=new Zi2();
//编译看左边
f.sleep();
f.eat();
}
}
//抽象类中可以有普通方法 也可以有抽象方法
//如果类中包含
abstract class Fu{
public void sleep() {
System.out.println("正在睡觉");
}
public abstract void eat();
}
//子类可以继承抽象类
//要把抽象类中的方法全部重写,否则子类还是抽象类
class Zi2 extends Fu{
@Override
public void eat() {
System.out.println("chichichi");
}
}
测试抽象类中构造方法的使用
//测试抽象类构造方法的用法
public class Test2_Abstract2 {
public static void main(String[] args) {
Fu3 f=new Zi3();
}
}
abstract class Fu3{
//抽象类中的构造方法
//抽象类自己是不能创建对象的,其构造方法是用来给子类创建对象的
public Fu3(){
System.out.println(1);
}
}
class Zi3 extends Fu3{
public Zi3(){
System.out.println(2);
}
}