. 一个类永远不要去继承一个已经实现好的类,而只能继承抽象类或实现接口
范例:为抽象类实例化
abstract class A{ //定义抽象类A public abstract void print(); //定义抽象方法print() } class B extends A{ //子类继承抽象类 public void print(){ System.out.println("Hello world!"); } } public class AbstractCaseDemo01{ public static void main(String args[]){ A a = new B(); //通过子类为抽象类实例化 a.print(); //调用的方法是被子类覆写过的方法 } } |
范例:为接口实例化
interface A{ //定义接口A public void print(); //定义抽象方法print() } class B implements A{ //子类实现接口 public void print(){ System.out.println("Hello world!"); } } public class InterfaceCaseDemo01{ public static void main(String args[]){ A a = new B(); //通过子类为抽象类实例化 a.print(); //调用的方法是被子类覆写过的方法 } } |
抽象类的实际应用-->模板设计
范例:抽象类的实际应用
abstract class Person{ //定义抽象类Person private String name; //定义name属性 private int age; //定义age属性 public Person(String name,int age){ //为属性初始化 this.name = name; //为name属性赋值 this.age = age; //为age属性赋值 } public String getName(){ //取得name属性内容 return name; } public int getAge(){ //取得age属性内容 return age; } public void say(){ //说话是具体功能,要定义成普通方法 System.out.println(this.getContent()); } public abstract String getContent(); //说话内容由子类定义 } class Student extends Person{ //定义Student继承Person类 private float score; public Student(String name,int age,float score){ super(name,age); //调用父类中构造方法 this.score = score; } public String getContent(){ //覆写父类中的抽象方法 return "学生信息-->姓名:"+super.getName()+ ",年龄:"+super.getAge() +",成绩:"+this.score; } } class Worker extends Person{ //定义Worker继承Person类 private float salary; public Worker(String name,int age,float salary){ super(name,age); //调用父类中构造方法 this.salary = salary; } public String getContent(){ //覆写父类中的抽象方法 return "工人信息-->姓名:"+super.getName()+ ",年龄:"+super.getAge() +",工资:"+this.salary; } } public class AbstractCaseDemo02{ public static void main(String args[]){ Person per1 = null; //声明Person对象 Person per2 = null; //声明Person对象 per1 = new Student("张三",20,90.0f); //学生是一个人 per2 = new Worker("李四",30,3000.0f); //工人是一个人 per1.say(); //学生说学生的内容 per2.say(); //工人说工人的内容 } } |