JAVA---abstract
JAVA---abstract
-
abstract可以用来修饰的结构;类、方法
- abstract修饰类:抽象类
- 此类不能实例化
- 抽象类中一定有构造器,用于子类实例化时调用
- abstract修饰方法:抽象方法
- 抽象方法只有方法的声明,没有方法体
- 包含抽象方法的类,一定是抽象类,然而抽象类中可以没有抽象方法。
- 若子类重写了父类中的所有的抽象方法后,则该子类可实例化,若子类没有重写父类中的所有的抽象方法,则该子类也必须是一个抽象类。
package exer; public class Exer { public static void main(String[] args) { Student s=new Student(); s.sleep(); } } //抽象类 abstract class Person{ String name; public Person(){ } //抽象方法 abstract public void sleep(); } class Student extends Person{ public void sleep(){ System.out.println("学生睡觉"); } }
- abstract修饰类:抽象类
-
abstract使用上的注意点:
- abstract不能用来修饰:属性、构造器等结构
- abstract不能用来修饰私有方法、静态方法、final的方法、final的类
练习:
package exer;
public class Exer {
public static void main(String[] args) {
Employee manger=new Manager("张三", 1, 1000, 2000);
manger.work();
Employee commonEmployee=new CommonEmployee();
commonEmployee.work();
}
}
/*
* 编写一个Employee类,声明为抽象类,
* 包含如下三个属性:name,id,salary
* 提供必要的构造器和抽象方法:work()
*
*/
abstract class Employee{
private String name;
private int id;
private double salary;
public Employee(){
}
public Employee(String name,int id,double salary){
this.name=name;
this.id=id;
this.salary=salary;
}
public abstract void work();
}
/*
* 声明一个Manager类,
* 他既是员工,还具有奖金(bonus)属性
*/
class Manager extends Employee{
private double bonus;
public Manager(double bonus){
super();
this.bonus=bonus;
}
public Manager(String name,int id,double salary,double bonus){
super(name,id,salary);
this.bonus=bonus;
}
public void work(){
System.out.println("管理员工");
}
}
/*
* 创建一个CommonEmployee类,
* 他是员工
*/
class CommonEmployee extends Employee{
public void work(){
System.out.println("生产产品");
}
}