抽象类和抽象方法
类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常的抽象,以至于他没有具体的实例,这样的类叫做 抽象类
abstract关键字的使用:
- abstract 抽象的
- abstract 可以修饰的结构:类、方法
- abstract 修饰类:抽象类
- 此类不能够被实例化
- 抽象类中一定要有构造器,便于子类对象实例化调用。
- 开发中都会提供抽象类的子类,让子类实例化
/**
* abstract关键字的使用
* 1. abstract抽象的
* 2. abstract可以用来修饰的结构:类、方法
* */
public class AbstractTest {
public static void main(String[] args) {
Student student = new Student("小明", 12);
student.eat();
student.walk();
student.sleep();
}
}
abstract class Person {
String name;
int age;
public Person(){}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("人吃饭");
}
public void walk() {
System.out.println("人走路");
}
public void sleep() {
System.out.println("人睡觉");
}
}
class Student extends Person {
public Student(){}
public Student(String name, int age) {
super(name, age);
}
}
-
abstract修饰方法:抽象方法
-
抽象方法没有方法体
-
包含抽象方法的类,一定是抽象类
-
需要继承的子类,实现该方法,或则子类也是抽象方法
-
/** * abstract关键字的使用 * 1. abstract抽象的 * 2. abstract可以用来修饰的结构:类、方法 * */ public class AbstractTest { public static void main(String[] args) { Student student = new Student("小明", 12); student.eat(); student.walk(); student.sleep(); } } abstract class Person { String name; int age; public Person(){} public Person(String name, int age){ this.name = name; this.age = age; } // 这是一个抽象方法 public abstract void eat(); public void walk() { System.out.println("人走路"); } public void sleep() { System.out.println("人睡觉"); } } class Student extends Person { public Student(){} public Student(String name, int age) { super(name, age); } // 子类实现抽象方法 @Override public void eat() { System.out.println("学生吃有营养的"); } } abstract class Student1 extends Person { public Student(){} public Student(String name, int age) { super(name, age); } }
-
抽象类的使用场景
抽象类是用来模型化哪些父类无法确定全部事项,而是由器子类提供具体实现的对象的类。
abstract使用上的注意点
- abstract 不能用来修饰:属性、构造器等结构
- 不能用来修饰 私有方法(私有方法是不可以被重写的, 且私有方法不可以被子类直接访问)、静态方法、final的方法、final类