抽象类
可以理解为看不懂的类
特点:
- 抽象类和抽象方法必须用abstract关键字修饰
- abstract class 类名{}
- public abstract void eat();
- 抽象类不一定有抽象方法,有抽象方法的类一定是个抽象类或者是接口
- 抽象类不能实例化,那么如何进行抽象类实例化?
- 由具体的子类实例化。这也是多态的一种,抽象类多态。
- 抽象类的子类
- 要么是抽象类
- 要么重写抽象类中的所有抽象方法
示例:
package lesson05;
public class Demo05 {
public static void main(String[] args) {
Cat c = new Cat();
c.eat();
c.sleep();
//这种写法,就是多态
Animal c2 = new Cat();
c2.eat();
c2.sleep();
Tanglaoya t = new Tanglaoya();
t.eat();
t.sleep();
}
}
abstract class Animal{
abstract void eat();
abstract void sleep();
}
class Cat extends Animal{
@Override
void eat() {
System.out.println("cat eat!");
}
@Override
void sleep(){
System.out.println("cat sleep!");
}
}
abstract class Duck extends Animal{}
class Tanglaoya extends Duck{
@Override
void eat() {
System.out.println("tanglaoya eat!");
}
@Override
void sleep(){
System.out.println("tanglaoya sleep!");
}
}
抽象类多态
上面示例中的这段代码:
//这种写法,就是多态
Animal c2 = new Cat();
c2.eat();
c2.sleep();
这种写法有很多种叫法,比如:
- 父类指向子类对象
- 抽象类指向子类对象
- 抽象类指向实现类对象
抽象类成员
特点:
- 成员变量:可以是变量,也可以是常量
- abstract不能修饰成员变量,只能修饰类和方法
- 构造方法:抽象类也是有构造方法的,用于子类访问父类数据的初始化
- 成员方法:抽象类的方法可以是抽象的,也可以是非抽象
- 抽象类的成员方法特性:
- 抽象方法:强制要求子类实现
- 非抽象方法:子类继承实现自己的业务,提高代码的复用性
示例代码:
package lesson06;
public class Demo06 {
public static void main(String[] args) {
Cat c = new Cat("miao");
System.out.println(c.name);
}
}
abstract class Animal{
String name;
public Animal(){}
public Animal(String name){
super();
this.name = name;
}
}
class Cat extends Animal {
public Cat(String name){
super(name);
}
}
网友评论