zoukankan      html  css  js  c++  java
  • java-继承

    继承


    • 继承概要

    Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力

    继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。

    继承的好处:

    体现代码的可复用行、扩展性。

    • 代码演示:

    Dog狗

    /***/
    blic class Dog {
    /**名称*/
    public String name;
    /**颜色*/
    public String color;
    /**价格*/
    public double price;
    
    /**显示信息*/
    public void show(){
        System.out.println("名称:"+name+",颜色:"+color);
    }
    }   

    Cat猫

    /***/
    public class Cat {
        /**名称*/
    public String name;
    /**颜色*/
    public String color;
    /**重量*/
    public double weight;
    
    /**显示信息*/
    public void show(){
        System.out.println("名称:"+name+",颜色:"+color);
    }
    }

    zoo动物园

    /**动物园*/
    public class Zoo {
    
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.name="吉娃娃狗";
        dog.color="绿色";
        dog.price=19800.7;
        dog.show();
    
        Cat cat=new Cat();
        cat.name="波斯猫";
        cat.color="红色";
        cat.weight=18.5;
        cat.show();
    
    }
    }   
    运行结果:

      上面的代码实现了基本功能,但有问题,主要是:name,color,show重复,如果系统中的动物类再增加将不停的重复,重复就会带来不便修改,不便维护的问题。

    •实现继承

    要解决上面的问题可以使用继承,达到代码复用的目的。

    Animal动物 :

    package com.demo.test3;
    /*动物*/
    public class Animal {
        public String name;  //名称
        public String color; //颜色
        
        //显示信息
        public void show(){
            System.out.println("名称:"+name+",颜色:"+color);
        }
    }

    Dog狗:

    package com.demo.test3;
    //狗继承动物
    public class Dog extends Animal {
        public double price; //价格
    }

    Cat猫:

    package com.demo.test3;

    public class Cat extends Animal {
    public double weight; //体重
    }

    Zoo动物园:

    package com.demo.test3;
    
    public class Zoo {
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.name="吉娃娃";
            dog.color="绿色";
            dog.price=144.1;
            dog.show();
            
            Cat cat = new Cat();
            cat.name="波斯猫";
            cat.color="红色";
            cat.weight=10.5;
            cat.show();
        }
    }

        从示例中可见dog并没有定义color属性,但在使用中可以调用,是因为dog继承了父类Animal,父类的非私有成员将被子类继承。如果再定义其它的动物类则无须再反复定义name,color与show方法。

    •Java继承的特征

    1.传递性

      若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。

    2.单根性

      若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

    3.子类调用父类成员

      a.使用super关键字调用父类成员

      b.子类默认会先调用父类的无参构造方法,如果父没有则报错,可以手动指定,但必须在第一行

    实例:

    Animal :

    package com.demo.test4;
    //动物
    public class Animal {
        public String name;  //名称
        public String color; //颜色
        
        public Animal(){
            System.out.println("这是动物类你空构造方法");
        }
        
        public Animal(String name,String color){
            this.name = name;
            this.color = color;
        }
        
        //显示信息
        public void show(){
            System.out.println("名称:"+name+",颜色:"+color);
        }
    
    }

    Dog  :

    package com.demo.test4;
    
    public class Dog extends Animal {
        public Dog(String name,String color,double price) {
            super(name,color); //调用父类构造方法
            this.price=price; //调用当前对象的成员
        }
        
        public double price; //价格
        //重写父类方法
        public void show(){
            super.show();  //子类调用父类方法
            System.out.println("价格:"+this.price);
        }
    }

    Cat: :

    package com.demo.test4;
    //
    public class Cat extends Animal{
        public double weight;
    }

    Zoo :

    package com.demo.test4;
    
    public class Zoo {
        public static void main(String[] args) {
            Dog dog = new Dog("中华田园犬","蓝色",123.56);
            dog.show();
            
            Cat cat = new Cat();
            cat.name = "波斯猫";
            cat.color = "红色";
            cat.weight = 18.5;
            cat.show();
        }    
    }
  • 相关阅读:
    泛型编程 --迭代器
    cpp输入输出加速
    算法训练 加法运算(指针的一个测试)
    蓝桥杯-基础练习-字母图形
    蓝桥杯-基础练习-特殊回文数
    win10下稍微美观下Git
    mysql8.0以上版本注册驱动并建立数据库的连接公共代码
    idea使用的一些问题解决记录
    单链表逆转(递归指针实现)
    increment/decrement/dereference操作符
  • 原文地址:https://www.cnblogs.com/sacai/p/11122355.html
Copyright © 2011-2022 走看看