Java基础——抽象类

一、什么是抽象类

后面会有各种类来继承父类,但是并不是所有继承了父类的子类都要做同一件事的。
比如狗类和猫类都继承了动物这个父类,但是吃东西的话就不是吃一个东西。
不是抽象类就需要往方法中加方法体,然后子类在重写,抽象类的话直接就是不用加方法体,子类可以直接进行重写

二、抽象类实现

所以我们将这些方法都重写就很麻烦,所以就用抽象类来实现。
//父类动物类
public  class Animal {
    public void eat(){
        System.out.println("吃东西");
    }
}
//子类狗类
public class Dog extends Animal{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("狗吃骨头");
    }
}
//子类猫类
public class Cat extends Animal{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("猫吃鱼");
    }
}
//调用
public static void main(String[] args) {
    Dog dog = new Dog();
    dog.eat();
    Cat cat = new Cat();
    cat.eat
子类继承了抽象类的父类必重写父类中的方法,要不然会报错。
//父类动物类(或者继续抽象)
public abstract class Animal {    
    public abstract void eat();
}
//子类鱼类
public abstract class Fish {
    public abstract void eat();
}
//鱼类的子类鲨鱼
public  class Shark extends Fish{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("鲨鱼吃肉");
    }
}
//鱼类子类草鱼
public class GoldFish extends Fish{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("金鱼吃水草");
    }
}

三、注意事项

1.抽象类不能创建对象,如果创建,编译会无法通过,因为抽象类中类的方法没有方法体
public abstract class Animal{
    public abstract void eat();
    public abstract void run(){
        System.out.println("动物在跑");
    } 
    public static void main(String [] args){
        Animal animal=new Animal();//会报错
    }
}
2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员使用的,(抽象类是不能实例化对象的,所以抽象类的构造方法自己用不了,“super()" )
父类中有构造方法,子类必须也重写,用super来调用父类
//父类中有构造方法
public abstract class Animal {    
    String name;
    int age;
    public Animal(String name,int age){
     this.name=name;
     this.age=age;
    }
    public abstract void eat();
}
//Bird中必须加上方法和构造方法
public class Bird extends Animal{
    public Bird(String name, int age) {
     super(name, age);
     // TODO Auto-generated constructor stub
    }
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("吃虫子");
    }
}
3.抽象类中不一定包含抽象方法,但是包含抽象方法的类必定是抽象类
4.抽象类的子类,必须重写父类中所有的抽象方法,否则,编译无法通过而报错,除非子类也是抽象类

posted @ 2022-10-08 10:51  花海~  阅读(99)  评论(0)    收藏  举报