一:抽象方法
在设计父类之初,将相同行为提取到父类后,由于每个子类实现某个方法的方式或者内容不相同,在父类创建方法的过程中不能确定具体创建方法的内容,这个方法就可以创建为抽象方法。由后续不同子类继承父类时,再对父类中的抽象方法进行重写。比如:在定义动物这个父类时,猫和狗都爱喝水,所以可以创建一个共同的喝水方法;而在动物这个类创建吃这个方法时,由于猫爱吃鱼,狗爱吃骨头,动物类无论创建哪个具体吃的方法都没法同时满足猫和狗的需求,所以直接创建一个吃的抽象类即可,由后续猫和狗两种动物重写吃的方法即可。
二:抽象类
如果一个类中创建了一个抽象类,IDEA会自动把类改成抽象类。
三:抽象类和抽象方法的定义格式
抽象类:public abstract class 类名{}
抽象方法:public abstract 返回值类型 方法名(参数列表);
四:抽象类和抽象方法的注意事项
1.抽象类不能实例化,即抽象类不能直接创建对象,要用子类继承抽象类,完善抽象方法再实例化;
2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类;
3.抽象类的子类,要么还是抽象类,要么重写所有的抽象方法。
五:实例
public abstract class Person { //属性 private String name; private int age; private String address; public Person() { } public Person(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } //创建一个正常方法,假定所有创建的对象都爱喝水 public void drink(){ System.out.println(getName()+"喜欢喝水"); } //每个人爱吃的东西不一样,所以创建一个抽象方法 public abstract void eat(); //创建一个抽象方法描述爱好 public abstract void hobbies(); }
//学生类继承
public class Student extends Person{ //Student继承抽象类,需要重写Person类中的所有抽象方法 public Student() { } public Student(String name, int age, String address) { super(name, age, address); } @Override public void eat() { System.out.println("饮食上喜欢吃辣椒炒肉"); } @Override public void hobbies() { System.out.println("非常喜欢在操场打篮球"); } }
//老师类继承
public class Teacher extends Person{ public Teacher() { } public Teacher(String name, int age, String address) { super(name, age, address); } @Override public void eat() { System.out.println("饮食上喜欢吃鱼香肉丝"); } @Override public void hobbies() { System.out.println("喜欢在KTV唱歌"); } }
//实例化对象输出信息
public class Test { public static void main(String[] args) { Student student=new Student("李华",16,"北京"); System.out.println("========基本信息========"); System.out.println("姓名:"+student.getName()+",年龄:"+student.getAge()+",家庭地址:"+student.getAddress()); System.out.println("=========爱好信息========"); student.drink(); student.eat(); student.hobbies(); Teacher teacher=new Teacher("黄梅",35,"上海"); System.out.println("========基本信息========"); System.out.println("姓名:"+teacher.getName()+",年龄:"+teacher.getAge()+",家庭地址:"+teacher.getAddress()); System.out.println("=========爱好信息========"); teacher.drink(); teacher.eat(); teacher.hobbies(); } }