文章目录
- 1. 抽象类概述
- 2. 抽象类特点
- 3. 抽象类的成员特点
- 4. 抽象类猫狗应用
1. 抽象类概述
在Java中,一个没有方法体的方法应该定义为抽象方法;而类中如果有抽象方法,该类必须定义为抽象类。
2. 抽象类特点
1. 抽象类和抽象方法必须使用abstract
关键字修饰。
public abstract class 类名{};
public abstract void eat();
2. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
3. 抽象类不能实例化。抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。
4. 抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类。
public abstract class Animal {public abstract void eat();public void sleep(){System.out.println("在睡觉");}
}public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼");}
}public class Demo {public static void main(String[] args) {Animal a=new Cat();//编译看左边,执行看右边a.eat(); //猫吃鱼a.sleep();//在睡觉}
}
3. 抽象类的成员特点
1. 成员变量:可以是常量,也可以是变量。
2. 构造方法:有构造方法,但是不能实例化。它用于子类访问父类数据的初始化。
3. 成员方法:可以有抽象方法,限定子类必须完成某些动作。也可以有非抽象方法,用于继承以提高代码复用性。
4. 抽象类猫狗应用
public abstract class Animal {private int age;private String name;public Animal(){}public Animal(String name,int age) {this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public abstract void eat();
}public class Cat extends Animal{public Cat(){}public Cat(String name,int age){super(name,age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}
}public class Demo {public static void main(String[] args) {//这就是向上转型Animal a=new Cat("加菲猫",5);System.out.println(a.getName()+" "+a.getAge()); // 输出:加菲猫 5}
}