抽象类的概述与特点 A:不懂,太抽象了 B:抽象类特点 a:抽象类和抽象方法必须用abstract修饰 *abstract class 类名() *public abstract void eat() b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是抽象接口 c:抽象类不能实例化,那么抽象类如何实例化呢? *按照多态的方式,由具体的子类实例化,其实这也是多态的一种,抽象类多态 d:抽象类的子类 *要么是抽象类要么重写抽象类中的所有抽象方法
抽象类的成员特点 a:成员变量:既可以是变量也可以是常量,abstract是否可以修饰变量?不可以 b:构造方法:有 *用于子类访问父类数据的初始化 c:成员方法:既可以是抽象的也可以是非抽象的 d:抽象类的成员方法特性 *抽象方法,强制子类做事情,执行标准,统一规则,(理解) *非抽象方法,子类继承的事情,提高代码复用性
public class abdemon {
public static void main(String[] args) {
//Animal a = new Animal()
//Cannot instantiate the type Animal
//抽象类不能实例化
//如果要抽象化必须实现(重写)抽象方法
Animal a = new Animal() {
public void eat() {
// TODO Auto-generated method stub
System.out.println("抽象类实例化要实现抽象方法");
}
};
a.eat();
Animal b = new Cat();//由具体的子类实例化
b.eat();
}
}
abstract class Animal{
public abstract void eat();//抽象类不能实例化
public Animal(){ //用于子类访问父类数据的初始化
System.out.println("父类无参构造");
}
}
class Cat extends Animal{
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼");
}
}
面试题 *1一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义 * 可以 * 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成 * 2abstract不能和那些关键字共存 * ——static和abstract//非法的修饰符组合 * 被abstract修饰的方法没有方法体 * 被static修饰的方法可以通过类名.调用,但是调用抽象方法是没有意义的 * ————final和abstract * 被abstract修饰的方法强制子类重写 * 被final修饰的方法不让子类重写 * ————private和abstract * 被abstract修饰的方法是为了让子类看到并强制重写 * 被private修饰的方法不让子类访问