抽象类:
1. 抽象类不能实例化;
2. 抽象类一定有构造器,便于子类实例化时调用;
抽象方法:
1. 只有方法的声明,没有方法体;
抽象类与抽象方法:
1. 包含抽象方法的类,一定是抽象类,
但抽象类中可以没有抽象方法, 这样做的目的是为了此类不能被实例化;
2. 如果一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法,
如果不覆写全部抽象方法则这个子类也必须是抽象类;
3. 抽象类中可以有实例方法,并实现业务逻辑 (接口中不能有实例方法去实现业务逻辑)
abstract 修饰的一定能够继承重写,所以以下情况不适用于 abstract:
abstract不能修饰: 属性、构造器
abstract不能修饰: private私有方法、static静态方法、final方法
package com.edward.demo.abstractTest;
public class AbstractTest {
public static void main(String[] args) {
// Person 类被abstract修饰,不可new Person()实例化
// abstract 抽象类中还有构造器,便于子类实例化时候去调用
// 开发中都会提供抽象类的子类,让子类去实例化对象
// Person p1 = new Person();
// p1.walk();
Person s1 = new Student("xiaoming", 18);
s1.eat();
}
}
// 抽象类
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("人走路");
}
}
// 子类继承抽象类
class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
// override重写抽象类中的抽象方法
public void eat() {
System.out.println("学生多吃有营养的食物");
}
}