一、什么是抽象类 后面会有各种类来继承父类,但是并不是所有继承了父类的子类都要做同一件事的。 比如狗类和猫类都继承了动物这个父类,但是吃东西的话就不是吃一个东西。 不是抽象类就需要往方法中加方法体,然后子类在重写,抽象类的话直接就是不用加方法体,子类可以直接进行重写 二、抽象类实现 所以我们将这些方法都重写就很麻烦,所以就用抽象类来实现。
//父类动物类 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.抽象类的子类,必须重写父类中所有的抽象方法,否则,编译无法通过而报错,除非子类也是抽象类 标签:Java,子类,void,基础,eat,Animal,抽象类,public From: https://www.cnblogs.com/YHSDDJM/p/16768284.html