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

一、继承的基本概念:

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

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

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

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

举个例子:

 1 public class Practice14 {
 2 
 3     /**
 4      * @param args
 5      */
 6     public static void main(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 class Anmial{
16     protected String name;
17     
18     public Anmial(String name){
19         System.out.println("animal");
20     }
21     
22     protected void desc(){
23         System.out.println(name);    
24     }
25 }
26 //子类
27 class Dog extends Anmial{
28     /*public Dog(){
29         
30         System.out.println("无参");
31     }*/
32     public Dog(String name){
33         //显示的调用父类构造方法
34         super(name);
35         this.name =name;
36         System.out.println("dog");
37     }
38     public void print(){
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 import java.util.Arrays;
  2 
  3 public class Practice14 {
  4     
  5     public static void main(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=new ImportCosmeticManager();
 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 extends CosmeticManager{
 33     public void list(){
 34         for(int i=0;i<super.count;i++){
 35             if("进口".equals(super.cosmetic[i].getType())){ //String类中的方法
 36                 super.cosmetic[i].print();
 37             }
 38         }
 39     }
 40 }
 41 
 42 //可按单价排序输出所有化妆品的类
 43 class SortCosmeticManager extends CosmeticManager{
 44     public void list(){
 45         Cosmetic[] cs=new Cosmetic[super.count];
 46         for(int i=0;i<cs.length;i++){
 47             cs[i]=cosmetic[i];
 48         }
 49         Cosmetic temp=null;
 50         for(int i=0;i<cs.length-1;i++){
 51             for(int j=0;j<cs.length-1-i;j++){
 52                 if(cs[j].getPrice()>cs[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<cs.length;i++){
 60             cs[i].print();
 61         }
 62     }
 63     
 64 }
 65 //化妆品管理类
 66 class CosmeticManager{
 67     protected Cosmetic[] cosmetic=new Cosmetic[3];
 68     protected int count=0;
 69     public void add(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 void list(){
 78         for(int i=0;i<count;i++){
 79             cosmetic[i].print();
 80         }
 81         
 82     }
 83     
 84 }
 85 
 86 //化妆品类
 87 class Cosmetic{
 88     private String name;
 89     private float price;
 90     private String type;
 91     public Cosmetic(){
 92         
 93     }
 94     public Cosmetic(String name,float price,String type){
 95         this.name=name;
 96         this.price=price;
 97         this.type=type;
 98     }
 99     public String getType() {
100         return type;
101     }
102     public void setType(String type) {
103         this.type = type;
104     }
105     public String getName() {
106         return name;
107     }
108     public void setName(String name) {
109         this.name = name;
110     }
111     public float getPrice() {
112         return price;
113     }
114     public void setPrice(float price) {
115         this.price = price;
116     }
117     public void print(){
118         System.out.println(name+"	"+price+"	"+type);
119     }
120     public static void print1(){
121         System.out.println("品牌	价格	类型");
122     }
123 }

 

原文地址:https://www.cnblogs.com/shenhainixin/p/5063267.html