一、继承的基本概念:
1.继承是面向对象三大特征之一
2.被继承的类成为父类(超类),继承父类的类成为子类(派生类)
3.继承是指一个对象直接使用另一个对象的属性和方法
4.通过继承可以实现代码重用
举个例子:
1 public classPractice14 {2
3 /**
4 *@paramargs5 */
6 public static voidmain(String[] args) {7 //TODO Auto-generated method stub
8 Dog dog=new Dog("花花");9 dog.print();10 dog.desc();//直接调用父类的desc方法
11
12 }13 }14 //父类
15 classAnmial{16 protectedString name;17
18 publicAnmial(String name){19 System.out.println("animal");20 }21
22 protected voiddesc(){23 System.out.println(name);24 }25 }26 //子类
27 class Dog extendsAnmial{28 /*public Dog(){29
30 System.out.println("无参");31 }*/
32 publicDog(String name){33 //显示的调用父类构造方法
34 super(name);35 this.name =name;36 System.out.println("dog");37 }38 public voidprint(){39 System.out.println("我的名字:"+name);40 }41 }
二、继承的限制
1.java中只能实现单继承,也就是一个类只能有一个父类
2.允许多层继承,即一个子类可以有一个父类,一个父类还可以有其它的父类
3.继承只能继承非私有的属性和方法
4.构造方法不能被继承
子类的实例化过程:子类实例化时会先调用父类的构造方法
如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法(super())
三、方法重写(发生在子类和父类之间,子类不想完全继承分类的方法)的特征
1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2.子类抛出的异常不能超过父类相应方法的异常(子类异常不能大于父类异常)
3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
下面举个实例:
实现一个化妆品商城中的化妆品管理
1.定义一个化妆品类(Cosmetic)
2.定义一个化妆品管理类(CosmeticManager)
(1)实现进货功能
(2)可以输出所有化妆品信息功能
3.使用继承实现一个可按单价排序输出所有化妆品的功能
4.使用继承实现一个只输出进口化妆品的功能
1 importjava.util.Arrays;2
3 public classPractice14 {4
5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub
7 Cosmetic.print1();8 /*CosmeticManager a1=new CosmeticManager();9 a1.add(new Cosmetic("韩束",54.88f,"进口"));10 a1.add(new Cosmetic("百雀羚",84.60f,"国产"));11 a1.add(new Cosmetic("香奈儿",500.0f,"进口"));12 a1.add(new Cosmetic("大宝",10.0f,"国产"));13 a1.list();*/
14
15 /*SortCosmeticManager a1=new SortCosmeticManager();16 a1.add(new Cosmetic("韩束",54.88f,"进口"));17 a1.add(new Cosmetic("百雀羚",84.60f,"国产"));18 a1.add(new Cosmetic("香奈儿",500.0f,"进口"));19 a1.add(new Cosmetic("大宝",10.0f,"国产"));20 a1.list();*/
21
22 ImportCosmeticManager a1=newImportCosmeticManager();23 a1.add(new Cosmetic("韩束",54.88f,"进口"));24 a1.add(new Cosmetic("百雀羚",84.60f,"国产"));25 a1.add(new Cosmetic("香奈儿",500.0f,"进口"));26 a1.add(new Cosmetic("大宝",10.0f,"国产"));27 a1.list();28
29 }30 }31 //实现只输出进口化妆品的类
32 class ImportCosmeticManager extendsCosmeticManager{33 public voidlist(){34 for(int i=0;i
36 super.cosmetic[i].print();37 }38 }39 }40 }41
42 //可按单价排序输出所有化妆品的类
43 class SortCosmeticManager extendsCosmeticManager{44 public voidlist(){45 Cosmetic[] cs=new Cosmetic[super.count];46 for(int i=0;ics[j+1].getPrice()){53 temp=cs[j];54 cs[j]=cs[j+1];55 cs[j+1]=temp;56 }57 }58 }59 for(int i=0;i
64 }65 //化妆品管理类
66 classCosmeticManager{67 protected Cosmetic[] cosmetic=new Cosmetic[3];68 protected int count=0;69 public voidadd(Cosmetic c){70 if(count>=cosmetic.length){71 int newLen=cosmetic.length*3/2+1;72 cosmetic=Arrays.copyOf(cosmetic, newLen);73 }74 cosmetic[count]=c;//顺序不能调换
75 count++;76 }77 public voidlist(){78 for(int i=0;i
82 }83
84 }85
86 //化妆品类
87 classCosmetic{88 privateString name;89 private floatprice;90 privateString type;91 publicCosmetic(){92
93 }94 public Cosmetic(String name,floatprice,String type){95 this.name=name;96 this.price=price;97 this.type=type;98 }99 publicString getType() {100 returntype;101 }102 public voidsetType(String type) {103 this.type =type;104 }105 publicString getName() {106 returnname;107 }108 public voidsetName(String name) {109 this.name =name;110 }111 public floatgetPrice() {112 returnprice;113 }114 public void setPrice(floatprice) {115 this.price =price;116 }117 public voidprint(){118 System.out.println(name+"\t"+price+"\t"+type);119 }120 public static voidprint1(){121 System.out.println("品牌\t价格\t类型");122 }123 }