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 }
Abstract class

 

二. 接口

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());
    }

}
Interface example

 

多态性:

      方法的重载和重写

      对象的多态性

            向上转型:程序自动完成

            向下转折:强制类型转换

posted @ 2016-01-04 16:05  bruceyo  阅读(198)  评论(0编辑  收藏  举报