抽象类:
抽象类特点:
A:抽象类和抽象方法必须用abstract关键字修饰
B:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口类
C:抽象类不能实例化
-->实例化的方法: 按照多态的方式,由具体的子类实例化
D:抽象类的子类:
-->抽象类
-->重写抽象类中的所有抽象方法
抽象类的成员特点:
A:成员变量:
既可以是变量,也可以使常量
abstract可以修饰成员变量吗? -->不能修饰
B:构造方法 -->有
用于子类访问父类数据的初始化
C:成员方法:
--> 既可以是抽象的,也可以是非抽象的
抽象类的成员方法特性:
A:抽象方法
--> 强制要求子类做的事情
B:非抽象方法
--> 子类继承的事情,提高了代码的复用性
面试题1:
一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
-->可以
-->目的:不让其他类创建本类对象,交给子类完成.
面试题2:
abstract不能和那些关键字共存?
-->static 可以直接直接通过类名访问,而abstract无方法体,所以修饰了无意义
-->final 不能被重写,矛盾
-->private 不能被继承,矛盾
另附一个抽象类的代码
[Java] 纯文本查看 复制代码 class Swap {
public static void main(String[] args){
Student s = new Student();
s.setName("博");
s.setAge(21);
System.out.println(s.getName()+".."+s.getAge());
s.eat();
s.study();
System.out.println("----------------");
Teacher t = new Teacher("李",25);
System.out.println(t.getName()+".."+t.getAge());
t.eat();
t.teach();
}
}
abstract class Person {
private String name;
private int age;
public Person(){}
public Person(String name,int age){
this.name = name;
this.age = age;
}
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 abstract void eat();
}
class Student extends Person{
public Student(){}
public Student(String name,int age){
super(name,age);
}
public void eat(){
System.out.println("学生吃饭");
}
public void study(){
System.out.println("学生学习");
}
}
class Teacher extends Person{
public Teacher(){}
public Teacher(String name,int age){
super(name,age);
}
public void eat(){
System.out.println("老师吃饭");
}
public void teach(){
System.out.println("老师教学");
}
}
|