面向对象思想概述
随着需求的更改,功能的增多,需要把不同的功能进行封装,其中功能类似的封装在一起,这样一来结构就清晰了很多。用的时候找到对应的类就可以了。这就是面向对象的思想。
面向对象是一种更符合我们思想习惯的思想,可以将复杂的事情简单化。学习编程语言,就是为了模拟现实世界的事物,实现信息化。
面向对象和面向过程的区别
面向过程强调的是每一个功能的步骤;面向对象强调的是对象,然后由对象去调用功能。
面向对象的特点
(1)封装(encapsulation);
(2)继承(inheritance);
* 乒乓球运动员和篮球运动员。乒乓球教练和篮球教练。
* 为了出国交流,跟乒乓球相关的人员都需要学习英语。
*请分析这个案例中有哪些抽象类,哪些接口,哪些具体类?
* 教练和运动员都是中国人,人可作为此处的顶级抽象类;
* 教练可作为人的抽象类,子类有乒乓球教练、篮球教练;
* 运动员可作为人的抽象类,子类有乒乓球运动员、篮球运动员;
* 额外的技能(学习英语)可作为接口,由乒乓球运动员类去实现;
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;}
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)封装(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;}
}
//定义接口,已扩展乒乓球有关的子类功能
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();
}
}
运行效果: