举例说明java面向对象思想的体现:抽象类、接口

来源:互联网 发布:深圳软件产业基地 顺丰 编辑:程序博客网 时间:2024/05/29 10:23
面向对象思想概述
随着需求的更改,功能的增多,需要把不同的功能进行封装,其中功能类似的封装在一起,这样一来结构就清晰了很多。用的时候找到对应的类就可以了。这就是面向对象的思想。
面向对象是一种更符合我们思想习惯的思想,可以将复杂的事情简单化。学习编程语言,就是为了模拟现实世界的事物,实现信息化。

面向对象和面向过程的区别
面向过程强调的是每一个功能的步骤;面向对象强调的是对象,然后由对象去调用功能。

面向对象的特点
(1)封装(encapsulation);
(2)继承(inheritance);

(3)多态(polymorphism)

下面来举一个例子展示面向对象思想

/*

 *教练和运动员案例
 *    乒乓球运动员和篮球运动员。乒乓球教练和篮球教练。
 *    为了出国交流,跟乒乓球相关的人员都需要学习英语。
 *请分析这个案例中有哪些抽象类,哪些接口,哪些具体类?
 *    教练和运动员都是中国人,人可作为此处的顶级抽象类;
 *    教练可作为人的抽象类,子类有乒乓球教练、篮球教练;
 *    运动员可作为人的抽象类,子类有乒乓球运动员、篮球运动员;
 *    额外的技能(学习英语)可作为接口,由乒乓球运动员类去实现;

*/


//中国人抽象类
abstractclassChinese{    //凡是有公共属性和方法的都可以抽象出来
    private String gender, name; private int age;
    public Chinese(){}
    public Chinese(String gender,String name,int age){
        this.gender=gender;this.name=name;this.age=age;
    }
    public voidsleeping(){   //不是抽象方法,在其子类可以不复写
        System.out.println("中国城市成年人平均睡眠时间7小时");}
    public abstract void eating();
    
    public voidsetName(String name){this.name = name;}
    publicString getName(){return name;}
    public void setGender(String gender){this.gender = gender;}
    public String getGender(){return gender;}
    public voidsetAge(int age){this.age = age;}
    public int getAge(){return age;}

}


//定义接口,已扩展乒乓球有关的子类功能

interface SpeakEnglish{
    publicvoidspeakEnglish(); //接口中的方法默认且必须是抽象的

}


//教练抽象类
abstract classCoach extends Chinese{
    public Coach(){}
    public Coach(String gender,String name,int age){
        super(gender,name,age);}
    public abstract void teach();

}


//运动员抽象类
abstractclassAthleteextends Chinese{
    public Athlete(){}
    public Athlete(String gender,String name,int age){
        super(gender,name,age);}
    public abstract void training();

}


//篮球教练子类
class BasketballCoach extends Coach{
    public BasketballCoach(){}
    public BasketballCoach(String gender,String name,int age){
        super(gender,name,age);}
    public void teach(){
        System.out.println("我是篮球教练");}
    public void eating(){
        System.out.println("篮球教练吃篮球");}

}


//乒乓球教练子类
class PingpongCoachextends CoachimplementsSpeakEnglish{
    public PingpongCoach(){}
    public PingpongCoach(String gender,String name,int age){
        super(gender,name,age);}
    publicvoid teach(){
        System.out.println("我是乒乓球教练");}
    publicvoidspeakEnglish(){
        System.out.println("作为乒乓球教练,需要学英语");}
    publicvoideating(){
        System.out.println("乒乓球教练吃乒乓球");}

}


//篮球运动员子类
class BasketballAthletextends Athlete{
    publicBasketballAthlet(){}
    public BasketballAthlet(String gender,String name,int age){
        super(gender,name,age);}
    public voidtraining(){
        System.out.println("每天练习打篮球");}
    publicvoid eating(){
        System.out.println("篮球运动员吃篮球");}

}


//乒乓球运动员子类
class PingpongAthleteextends AthleteimplementsSpeakEnglish{
    public PingpongAthlete(){}
    public PingpongAthlete(String gender,String name,int age){
        super(gender,name,age);}
    public void training(){
        System.out.println("每天练习打乒乓球");}
    public voidspeakEnglish(){
        System.out.println("作为乒乓球运动员,需要学英语");}
    public void eating(){
        System.out.println("乒乓球运动员吃乒乓球");}

}


//运行结果
class CaseAbstractInterface{
    public static void main(String[] args){
        BasketballCoach bskCoach = new BasketballCoach(
                "男","男篮教练阿拉蕾",46);
        System.out.print(bskCoach.getGender()+" ");
        System.out.print(bskCoach.getName()+" ");
        System.out.print(bskCoach.getAge()+"\t");
        bskCoach.sleeping();
        bskCoach.eating();
        System.out.println("----------------");
        
        PingpongCoach ppc = new PingpongCoach(
                "男","乒乓教练刘国梁",42);
        System.out.print(ppc.getGender()+"\t");
        System.out.print(ppc.getName()+"\t");
        System.out.print(ppc.getAge()+"\t");
        ppc.teach();
        ppc.eating();
        ppc.speakEnglish();
        System.out.println("----------------");
        
        BasketballAthlet bskAthlete = newBasketballAthlet(
                "女","李如花",19);
        System.out.print(bskAthlete.getGender()+"\t");
        System.out.print(bskAthlete.getName()+"\t");
        System.out.print(bskAthlete.getAge()+"\t");
        bskAthlete.training(); bskAthlete.eating();
        System.out.println("----------------");
        
        PingpongAthlete ppAthlete = new PingpongAthlete(
                "女","吴甜甜",17);
        System.out.print(ppAthlete.getGender()+"\t");
        System.out.print(ppAthlete.getName()+"\t");
        System.out.print(ppAthlete.getAge()+"\t");
        ppAthlete.training();
        ppAthlete.eating();
        ppAthlete.speakEnglish();
    }

}

运行效果:


1 0