java进阶 Week4-4.1-继承(待细究)

面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。继承是非常简单而强大的设计思想,它提供了我们代码重用和程序组织的有力工具。

类是规则,用来制造对象的规则。我们不断地定义类,用定义的类制造一些对象。类定义了对象的属性和行为,就像图纸决定了房子要盖成什么样子。

一张图纸可以盖很多房子,它们都是相同的房子,但是坐落在不同的地方,会有不同的人住在里面。假如现在我们想盖一座新房子,和以前盖的房子很相似,但是稍微有点不同。任何一个建筑师都会拿以前盖的房子的图纸来,稍加修改,成为一张新图纸,然后盖这座新房子。所以一旦我们有了一张设计良好的图纸,我们就可以基于这张图纸设计出很多相似但不完全相同的房子的图纸来。

基于已有的设计创造新的设计,就是面向对象程序设计中的继承。在继承中,新的类不是凭空产生的,而是基于一个已经存在的类而定义出来的。通过继承,新的类自动获得了基础类中所有的成员,包括成员变量和方法,包括各种访问属性的成员,无论是public还是private。当然,在这之后,程序员还可以加入自己的新的成员,包括变量和方法。显然,通过继承来定义新的类,远比从头开始写一个新的类要简单快捷和方便。继承是支持代码重用的重要手段之一。

类这个词有分类的意思,具有相似特性的东西可以归为一类。比如所有的鸟都有一些共同的特性:有翅膀、下蛋等等。鸟的一个子类,比如鸡,具有鸟的所有的特性,同时又有它自己的特性,比如飞不太高等等;而另外一种鸟类,比如鸵鸟,同样也具有鸟类的全部特性,但是又有它自己的明显不同于鸡的特性。

如果我们用程序设计的语言来描述这个鸡和鸵鸟的关系问题,首先有一个类叫做“鸟”,它具有一些成员变量和方法,从而阐述了鸟所应该具有的特征和行为。然后一个“鸡”类可以从这个“鸟”类派生出来,它同样也具有“鸟”类所有的成员变量和方法,然后再加上自己特有的成员变量和方法。无论是从“鸟”那里继承来的变量和方法,还是它自己加上的,都是它的变量和方法。





项目  ;  录入cd和DVD(入门1.0版)  

缺点:   代码重复,不便维护,不具有可扩展性

------------------database class------------------------------

import java.util.ArrayList;


public class Datebase {
private ArrayList<CD> listCD = new ArrayList<CD>();
private ArrayList<DVD> listDVD = new ArrayList<DVD>();
public void add(CD cd){
listCD.add(cd);
}
public void add(DVD dvd){
listDVD.add(dvd);
}
public void list(){
for (CD cd : listCD)
cd.print();
for (DVD dvd:listDVD){
dvd.print();
}
}

public static void main(String[] args) {
// TODO 自动生成的方法存根
Datebase db = new Datebase();
db.add(new CD("abc","abc",4,60,"..."));
db.add(new CD("def","edf",4,60,"..."));
db.add(new DVD("xxx","yyy",60,"..."));
db.list();

}



---------------------------------------------------------DVD class---------------------------------------------------


public class DVD {
private String title ;
private String director;
private int palyingTime ;
private boolean gotIt = false;
private String comment;

public static void main(String[] args) {
// TODO 自动生成的方法存根


}


public void print() {
System.out.println("DVD:"+title+":"+director);


// TODO 自动生成的方法存根

}


public DVD(String title, String director, int palyingTime, String comment) {
super();
this.title = title;
this.director = director;
this.palyingTime = palyingTime;
this.comment = comment;
}


}



-----------------------------------------CD  class--------------------------------------------

public class CD {
private String title ;
private String artist;
private int numofTracks;
private int palyingTime ;
private boolean gotIt = false;
private String comment;

public CD(String title, String artist, int numofTracks, int palyingTime, String comment) {
// super();
this.title = title;
this.artist = artist;
this.numofTracks = numofTracks;
this.palyingTime = palyingTime;
this.comment = comment;
}


public static void main(String[] args) {
// TODO 自动生成的方法存根


}


public void print() {
// TODO 自动生成的方法存根
System.out.println("CD:"+title+":"+artist);

}


}



---------------------------------------继承------------------------------

录入_进阶版(无错,有问题,待解决)

Item是父类 



子类和父类的关系


-----------------------------------------------Datebase class---------------------------------------------------


import java.util.ArrayList;


public class Datebase {
// private ArrayList<CD> listCD = new ArrayList<CD>();
//private ArrayList<DVD> listDVD = new ArrayList<DVD>();
private ArrayList<Item> listItem = new ArrayList<Item>();

// public void add(CD cd){
// listCD.add(cd);
// }
// public void add(DVD dvd){
// listDVD.add(dvd);
// }
public void add(Item item){
listItem.add(item);
}
// public void list(){
// for (CD cd : listCD)
// cd.print();
// for (DVD dvd:listDVD){
// dvd.print();
// }
// }
//
public void list(){
for(Item item :listItem){
item.print();
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Datebase db = new Datebase();
db.add(new CD("abc","abc",4,60,"..."));
db.add(new CD("def","edf",4,60,"..."));
db.add(new DVD("xxx","yyy",60,"..."));
db.list();

}


}


---------------------------------------------------------Item class-----------------------------------------------



public class Item {
private String title ;
private int playingTime ;
private String comment;
private boolean gotIt = false;
public Item(String title, int playingTime, String comment, boolean gotIt) {
super();
this.title = title;
this.playingTime = playingTime;
this.comment = comment;
this.gotIt = gotIt;
}

public void setTitle(String title){
this.title = title;

}


public  void print() {
System.out.println(title);
}
   
}


-----------------------------------------------------------DVD class------------------------------------------------------




public class DVD  extends Item{
private String director;

public DVD(String title, String director, int playingTime, String comment) {
super(title,playingTime,comment,false );
setTitle("b");
this.director = director;

}
public static void main(String[] args) {
DVD dvd = new DVD ("a","b",1,"...");
dvd.print();
}


public void print() {
System.out.println("DVD:");
super.print();//调用父类的print
System.out.print(director);


// TODO 自动生成的方法存根

}





}

---------------------------------------------------CD class-----------------------------------------




public class CD extends Item  {//CD 扩展到 Item 即CD是Item的子类
private String artist;
private int numofTracks;
public CD(String title, String artist, int numofTracks, int palyingTime, String comment) {
super(title,numofTracks,comment,false);//调用Item的构造器,

//继承自父类,对应父类中的顺序,String int String boolean

// this.title = title;//继承自父类,不用自己初始化

// this.artist = artist;
// this.numofTracks = numofTracks;
setTitle("c");
this.numofTracks = numofTracks;

}


public static void main(String[] args) {
CD cd = new CD ("c","d",2,3,"...");//对应子类CD方法中的参数顺序
cd.print();
}


public void print() {
// TODO 自动生成的方法存根
System.out.println("CD:");
super.print();
System.out.print(numofTracks);


}


}


--------------------------------可扩展性--------------------------新增VideoGame class-----------------------

package datebase;


public class VideoGame extends Item {//新增加的datebase类型,在创建时直接super自Item
private int numberOfPlayers;

public VideoGame(String title,int playingTime, boolean gotIt,
String comment, int number){
super (title, playingTime, comment, gotIt);
numberOfPlayers = number;
}

@Override
public void print() {
System.out.println("VideoGame");
super.print();
}


public static void main(String[] args) {

}


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值