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;
    }
  • 相关阅读:
    Thinkphp无法加载验证码 undefined function Thinkimagettftext() 解决方案 mac系统
    fragment使用不当 导致java.lang.IllegalStateException
    怎样从GitHub项目中,下载单个文件夹或文件
    Android 5.0 app样式
    OpenCV fitline直线拟合函数学习
    Linux文件系统
    Ubuntu 12.04 笔记本触摸板失灵解决方法
    利用微软测试工具PICT生成测试用例
    Myeclipse 使用JUnit 进行单元测试
    Myeclipse 2014 安装checkstyle、PMD和Metrics
  • 原文地址:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10752714.html
Copyright © 2011-2022 走看看