文章目录
- 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{
@Override
public 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);
}
@Override
public 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
}
}