Java抽象类 抽象类:在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。 有abstract修饰的类是抽象类。 有抽象方法的类必须是抽象类。 如果一个类里有抽象方法,这个类的子类必须重写所有的抽象方法。除非这个子类也是抽象类。 格式:抽象类就是多了一个abstract来修饰 格式举例: abstract class Animal { public abstract void eat(); public void run() { } } 抽象方法: 不同子类的方法是相似,但是具体内容又不太一样,所以我们只能在父类中抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法 格式:抽象方法就是把方法用abstract修饰,去掉方法的{}用分号代替。 格式举例: public abstract void eat(); 抽象类的特点 抽象方法只能在抽象类里面 抽象类中可以没有抽象方法 抽象类和抽象方法必须被abstract修饰 抽象类不能创建对象(不能实例化) 抽象类中可以有非抽象的方法 抽象类和类的关系也是继承 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类 抽象类的成员特点 成员变量 可以有成员变量 可以有常量 成员方法 可以有抽象方法 可以有非抽象方法 构造方法 可以有构造方法的,因为需要对抽象类的成员变量进行初始化(理解:虽然抽象类不能直接创建对象。但是我们写抽象类一般是写一个子类去继承抽象类,子类的构造方法会调用父类的构造,所以抽象类肯定也有构造方法。) package com.itheima_04; /* * 分析:从具体到抽象 * 实现:从抽象到具体 * 使用:使用的是具体的类的对象 * * 分析: * package com.itheima_04; /* * 分析:从具体到抽象 * 实现:从抽象到具体 * 使用:使用的是具体的类的对象 * * 分析: * 基础班老师: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(){} * 就业班老师: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(){} * * 抽象的老师类: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(); */ public class TeacherDemo { public static void main(String[] args) { //使用的是具体的类的对象 //BasicTeacher //多态形式的测试 Teacher t = new BasicTeacher(); t.setName("林青霞"); t.setAge(30); System.out.println(t.getName()+"---"+t.getAge()); t.teach(); System.out.println("---------------------------"); t = new BasicTeacher("林青霞", 30); System.out.println(t.getName()+"---"+t.getAge()); t.teach(); } } 基础班老师: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(){} * 就业班老师: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(){} * * 抽象的老师类: * 成员变量:name,age * 构造方法:无参,带参 * 成员方法:getXxx(),setXxx(),teach(); */ public class TeacherDemo { public static void main(String[] args) { //使用的是具体的类的对象 //BasicTeacher //多态形式的测试 Teacher t = new BasicTeacher(); t.setName("林青霞"); t.setAge(30); System.out.println(t.getName()+"---"+t.getAge()); t.teach(); System.out.println("---------------------------"); t = new BasicTeacher("林青霞", 30); System.out.println(t.getName()+"---"+t.getAge()); t.teach(); } } package com.itheima_04; //就业班老师 public class WorkTeacher extends Teacher { public WorkTeacher() {} public WorkTeacher(String name,int age) { super(name,age); } @Override public void teach() { System.out.println("就业班老师讲解JavaEE的内容"); } } package com.itheima_04; //基础班老师 public class BasicTeacher extends Teacher { public BasicTeacher() {} public BasicTeacher(String name,int age) { super(name,age); } @Override public void teach() { System.out.println("基础班老师讲解JavaSE的内容"); } } package com.itheima_04; //抽象的老师类 public abstract class Teacher { private String name; private int age; public Teacher() {} public Teacher(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 teach(); } 总结:普通类有的抽象类都有,只不过抽象类比普通类多了一个abstract修饰,并且里面可能有抽象方法。
|