Java Abstract Class & Interface
一. 抽象类
1. 抽象类:包含了一个抽象方法的类就是抽象类
2. 抽象方法:声明而未被实现的方法,用关键字abstract声明
3. 抽象类被子类继承,子类(如果不是抽象类)必须重写(override)抽象类中的所有抽象方法
4. 定义格式:
abstract class className{ 属性 方法 抽象方法 }
5. 抽象类不能被直接实例化,要通过其子类进行实例化
抽象类的应用
1 package com.bruceyo.absdemo; 2 3 //抽象类的应用 4 abstract class Person{ 5 private int age; 6 private String name; 7 public Person(int age, String name){ 8 this.age = age; 9 this.name = name; 10 } 11 public void tell(){ 12 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 public abstract void want(); 32 33 } 34 class Student extends Person{ 35 private int score; 36 37 public int getScore() { 38 return score; 39 } 40 41 public void setScore(int score) { 42 this.score = score; 43 } 44 45 public Student(int age, String name, int score) { 46 super(age, name); 47 this.score = score; 48 // TODO Auto-generated constructor stub 49 } 50 51 @Override 52 public void want(){ 53 System.out.println("Name:"+getName()+", Age:"+getAge()+", Score:"+getScore()); 54 } 55 56 } 57 class Worker extends Person{ 58 private int money; 59 60 61 public int getMoney() { 62 return money; 63 } 64 65 public void setMoney(int money) { 66 this.money = money; 67 } 68 69 public Worker(int age, String name, int money) { 70 super(age, name); 71 this.money = money; 72 // TODO Auto-generated constructor stub 73 } 74 75 @Override 76 public void want(){ 77 System.out.println("Name:"+getName()+", Age:"+getAge()+", money:"+getMoney()); 78 } 79 80 } 81 82 public class AbsDemo { 83 84 public static void main(String[] args) { 85 // TODO Auto-generated method stub 86 Student student = new Student(55,"Bruce",4); 87 student.want(); 88 Worker worker = new Worker(66, "Json", 6666); 89 worker.want(); 90 91 } 92 93 }
二. 接口
1. 接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成
2. 定义格式:
interface interfaceName{ 全局常量 //e.g. public static final int AGE = 100; 抽象方法 //e.g. public abstract void tell(); }
3. 接口实现必须通过子类,使用关键字implements, 而且接口是可以多实现的
4. 一个类可以同时继承抽象类和实现接口
5. 一个接口不能继承一个抽象类,但是可以通过extends关键字同时继承多个接口,实现接口多继承
接口的应用
package com.bruceyo.absdemo; interface USB{ //制定一个标准,每一个USB必须按照这个标准进行工作 void start();//可省略public abstract void stop(); } class C{ //接口的实例 public static void work(USB u){ u.start(); System.out.println("Working"); u.stop(); } } class USBDisk implements USB{ public void start(){ System.out.println("USBDisk start Working"); } public void stop(){ System.out.println("USBDisk stop Working"); } } class Printer implements USB{ public void start(){ System.out.println("Printer start Working"); } public void stop(){ System.out.println("Printer stop Working"); } } public class InterfaceDemo { public static void main(String[] args) { // TODO Auto-generated method stub C.work(new USBDisk()); C.work(new Printer()); } }
多态性:
方法的重载和重写
对象的多态性
向上转型:程序自动完成
向下转折:强制类型转换