zoukankan      html  css  js  c++  java
  • 面向对象三大特征之二:继承

    Q:为什么使用继承?

         为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class)

    一,java继承的特性

    [1] 单根性。在java中,一个类只能有一个直接父类。

    [2] 传递性。C继承于B,B继承于A,C具有A的特性和行为

    类B继承于类A,那么类B就拥有了类A中非私有的属性和方法(也可理解成B继承了A中所有的属性和方法,只不过私有的属性和方法B无法访问而已)

    继承用:B extends A

    //类A:
    public class Person{
        String name;
        int age;
        
        public void showInfo(){
            System.out.println("姓名:"+name);
            System.out.println(",年龄:"+age);
        }
    }
    //类B:
    public class Student extends Person{
        
    }
    public class Test01{
        public static void main(String[] args){
            Student s = new Student();
            s.name = "张三";
            s.age = 20;
            s.showInfo();
        }
    }

    二,关键字:super

    表示父类对象,没有引用作用

    [1] super访问父类构造方法

    public Dog(String name,int health,int love,String strain){
            super(name,health,love);//必须写在构造方法的第一句
            this.setStrain(strain);    
        }

    [2]  super调用父类的非私有属性

        super可以访问父类的非私有属性,不能访问私有属性(也就是用private修饰过的属性)

         如果要访问父类属性,那么用  super.属性   ;如果要访问子类属性则用     this.属性

         (不管要访问的属性是不是同一个)

    [3] super调用父类非私有方法

        也和调用属性一样 使用   super.方法

    三,子类继承父类的资源

    四,访问修饰符

    java中存在4类访问修饰符,分别是private、默认、protected、public。

    修饰符

    本类✘

    同包子类

    同包其他类

    不同包子类

    不同包其他类

    private

    默认

    protected

    public

     **

    private:私有的,只能在本类可以访问。

    friendly:默认的,同包可访问,也称包访问权限。

    protected:受保护的, ①子类可访问 ②同包可访问

    public:公共的,都可以访问

    五,继承关系的初始化顺序

    继承关系的初始化内存图

    (该图用于自己理解的,一般人看不懂)

    六,方法的重写

    当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况进行方法重写(overwrite/override)

    方法重写建立在继承的基础上,没有继承,就没有重写!

    子类根据自身情况,可以选择部分重写和完全重写

    部分重写:

    public void showInfo(){
            super.showInfo();
            System.out.println("我是一只"+this.getStrain());
        }

    完全重写:

    public void showInfo(){
            System.out.println("--"+super.getName()+"--");
            System.out.println("健康值:"+super.getHealth());
            System.out.println("亲密度:"+super.getLove());
            System.out.println("品种:"+this.getStrain());
        }

    重写的规则:

    [1]方法名称相同

    [2]参数列表相同

    [3]子类的访问权限一定 >= 父类访问权限

    [4]返回值和父类相同或者是其子类

    public Pet create(){
            Pet pet = new Pet();
            return pet;
    }
    public Dog create(){
            Dog dog = new Dog();
            return dog;
    }
  • 相关阅读:
    Leetcode86.分隔链表
    Leetcode39.组合总和
    Leetcode31.下一个排列
    剑指Offer35.复杂链表复制
    剑指Offer14-I.剪绳子
    剑指Offer38.字符串的排序
    Leetcode29.两数相除
    232. Implement Queue using Stacks
    程序员跳槽指南
    226. Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10752714.html
Copyright © 2011-2022 走看看