----------------------
ASP.Net+Android+IO开发S、
.Net培训、期待与您交流! ----------------------
抽象类
abstract
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,这时,只抽取功能定义,不抽取功能主体。
抽象类的特点:
1.抽象方法一定定义在抽象类中。
2.抽象方法和抽象类都必须被abstract关键字修饰。
3.抽象类不可以用new创建对象,因为调用抽象方法没意义。
4.抽象类中的方法要被调用,必须由子类复写起所有的抽象方法后,建立子类对象掉用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
package biji;
public abstract class StudentFu {
abstract void study(); //父类 抽象了 因为子类功能主体不同 功能要抽象,类名要抽象
}
package biji;
public class Student1 extends StudentFu {
void study(){
System.out.println("2study");
}
}
package biji;
public class Student2 extends StudentFu{
void study(){
System.out.println("1study");
}
}
package biji;
public class Student4 {
public static void main(String[] args) {
Student1 s=new Student1();//只能建立子类对象,因为父类是抽象的,不能被new
s.study();
//或者写成new Student1().study();这样写直接建立对象并输出。
}
}//结果2study
抽象类强迫子类去做些事情
抽象类比一般类多了个抽象函数,就是在类中定义抽象方法,也可以不定义。
抽象类不可以实例化。
抽象类的作用就是不让该类建立对象
抽象类联系:开个一个系统对员工进行建模,员工包含3个属性:姓名、工号、工资。经理也是员工,除了含有员工的属性外,另外还有奖金属性。用继承的思想设计出员工类和经理类,要求类中提供必要的方法进行属性访问。
package biji;
public abstract class Yuangong {
private String name;
private String id;
private double money;//定义三个基本属性
Yuangong(String name,String id,double money){
this.name=name;
this.id=id;
this.money=money;
}//建立构造函数,员工进行初始化。
public abstract void work();//工作,员工和经理都是工作的,但是工作的
// 具体方式不同,即work方法主体不同。
//所以整成抽象的。
}
package biji;
public class Jingli extends Yuangong {
private int jiangjin;//经理类继承自员工类,但是经理独有属性,奖金
Jingli(String name,String id,double money,int jiangjin){
super(name,id,money);//直接调用父类的构造函数
this.jiangjin=jiangjin;
}
public void work(){
System.out.println("Jingli work");
}
}