Java面向对象_继承——基本概念以及管理化妆品实例分析

时间:2023-03-09 09:26:22
Java面向对象_继承——基本概念以及管理化妆品实例分析

一、继承的基本概念:

1.继承是面向对象三大特征之一

2.被继承的类成为父类(超类),继承父类的类成为子类(派生类)

3.继承是指一个对象直接使用另一个对象的属性和方法

4.通过继承可以实现代码重用

举个例子:

 public class Practice14 {

     /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog=new Dog("花花");
dog.print();
dog.desc();//直接调用父类的desc方法 }
}
//父类
class Anmial{
protected String name; public Anmial(String name){
System.out.println("animal");
} protected void desc(){
System.out.println(name);
}
}
//子类
class Dog extends Anmial{
/*public Dog(){ System.out.println("无参");
}*/
public Dog(String name){
//显示的调用父类构造方法
super(name);
this.name =name;
System.out.println("dog");
}
public void print(){
System.out.println("我的名字:"+name);
}
}

二、继承的限制

1.java中只能实现单继承,也就是一个类只能有一个父类

2.允许多层继承,即一个子类可以有一个父类,一个父类还可以有其它的父类

3.继承只能继承非私有的属性和方法

4.构造方法不能被继承

子类的实例化过程:子类实例化时会先调用父类的构造方法

如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法(super())

三、方法重写(发生在子类和父类之间,子类不想完全继承分类的方法)的特征

1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)

2.子类抛出的异常不能超过父类相应方法的异常(子类异常不能大于父类异常)

3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

下面举个实例:

实现一个化妆品商城中的化妆品管理

1.定义一个化妆品类(Cosmetic)

2.定义一个化妆品管理类(CosmeticManager)
   (1)实现进货功能
  (2)可以输出所有化妆品信息功能
3.使用继承实现一个可按单价排序输出所有化妆品的功能
4.使用继承实现一个只输出进口化妆品的功能

 import java.util.Arrays;

 public class Practice14 {

     public static void main(String[] args) {
// TODO Auto-generated method stub
Cosmetic.print1();
/*CosmeticManager a1=new CosmeticManager();
a1.add(new Cosmetic("韩束",54.88f,"进口"));
a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
a1.add(new Cosmetic("大宝",10.0f,"国产"));
a1.list();*/ /*SortCosmeticManager a1=new SortCosmeticManager();
a1.add(new Cosmetic("韩束",54.88f,"进口"));
a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
a1.add(new Cosmetic("大宝",10.0f,"国产"));
a1.list();*/ ImportCosmeticManager a1=new ImportCosmeticManager();
a1.add(new Cosmetic("韩束",54.88f,"进口"));
a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
a1.add(new Cosmetic("大宝",10.0f,"国产"));
a1.list(); }
}
//实现只输出进口化妆品的类
class ImportCosmeticManager extends CosmeticManager{
public void list(){
for(int i=0;i<super.count;i++){
if("进口".equals(super.cosmetic[i].getType())){ //String类中的方法
super.cosmetic[i].print();
}
}
}
} //可按单价排序输出所有化妆品的类
class SortCosmeticManager extends CosmeticManager{
public void list(){
Cosmetic[] cs=new Cosmetic[super.count];
for(int i=0;i<cs.length;i++){
cs[i]=cosmetic[i];
}
Cosmetic temp=null;
for(int i=0;i<cs.length-1;i++){
for(int j=0;j<cs.length-1-i;j++){
if(cs[j].getPrice()>cs[j+1].getPrice()){
temp=cs[j];
cs[j]=cs[j+1];
cs[j+1]=temp;
}
}
}
for(int i=0;i<cs.length;i++){
cs[i].print();
}
} }
//化妆品管理类
class CosmeticManager{
protected Cosmetic[] cosmetic=new Cosmetic[3];
protected int count=0;
public void add(Cosmetic c){
if(count>=cosmetic.length){
int newLen=cosmetic.length*3/2+1;
cosmetic=Arrays.copyOf(cosmetic, newLen);
}
cosmetic[count]=c;//顺序不能调换
count++;
}
public void list(){
for(int i=0;i<count;i++){
cosmetic[i].print();
} } } //化妆品类
class Cosmetic{
private String name;
private float price;
private String type;
public Cosmetic(){ }
public Cosmetic(String name,float price,String type){
this.name=name;
this.price=price;
this.type=type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public void print(){
System.out.println(name+"\t"+price+"\t"+type);
}
public static void print1(){
System.out.println("品牌\t价格\t类型");
}
}