面向对象-继承

作者: 我叫吴智斌 | 来源:发表于2018-11-01 12:00 被阅读10次

继承思想

继承是为了解决代码重复的问题

继承extents

public class Student extends Person
extents  表示继承   后面是父类  前面是子类

继承子类与父类的关系

public 子类都可以继承
protected 子类可以继承,不同包不能继承
默认:同一个包可以继承,不同包不能继承
private:子类打死都继承不到.
父类的构造器子类不能继承


继承方法的覆盖
子类你扩展了父类,获得了父类当中的方法和成员变量,
可是父类当中的某些方法,不适合子类本身
不适合子类的方法,可以覆盖,重新定义这个方法
我们称子类重新定义父类当中方法的过程,方法的覆盖(重写)

        Penguin p =new Penguin();
        //企鹅  
        p.fly();
        //会到子类当中去找,有没有调用的方法,如果没有,再去到父类当中查找

覆盖的原则:
1.覆盖的方法必须要跟父类的当中方法名相同(签名:方法名称+参数)
2.覆盖的方法返回值类型必须要和父类一样
3.覆盖的方法访问权限必须要比父类方法大或者一样大(不能比父类的还小)

        @Override  //判断该方法是否为覆盖的方法
        void fly(){

}

package Wzb;

public class Penguin extends Bird {
    
    @Override   //判断该方法是否为覆盖的方法
    void fly() {
        System.out.println("企鹅起飞啦");
    }
    
    void test() {
        System.out.println("test---------");
        fly();//到自己类当中去找方法    fly=this.fly();  this  代表当前使用对象
        super.fly();//代表是父类对象    到父类中找指定的方法
    }
    
    public static void main(String[] args) {

        //如果一个类有父类的,会在构造器当中,默认调用父类的构造器
        //先创建父类对象,再创建自己
        Penguin p = new Penguin();
        p.fly();
        //会到子类(本类)当中寻找有没有调用的方法,如果没有,再去父类当中查找
        p.test();

    }

}

继承内存分析
1.在类加载字节码是,会先判断有没父类,如果有,会先把父类加载成字节码放到内存当中,然后再去把自己加载到内存当中去,先加载父类,再加载自己(先初始化父类再初始化子类)
2.如果一个类有父类的,会在构造器当中,默认调用父类的构造器
3.凡是子类的构造方法当中都会有super();
4.不要与this();当前类构造方法一起使用

字段隐藏

package 继承.A;

class SuperClass{
    
    String name ="myxq";
    int age;
    
    public static void test1() {
        System.out.println("sup test1");
    }
}

public class SubClass extends SuperClass {
    
    //子类和父类当中有相同的静态方法,这时候我们称它是方法的隐藏,不是静态的称是覆盖
    public static void test1() {
        System.out.println("sub test1");
    }
    
    String name = "123";//字段隐藏
    
    void test() {
        //this.字段或方法,先到本类当中去找指定的内容,如果没有,再去父类当中去找
        //如果父类有,再去看一下父类允许继承,如果允许就使用父类的.
        //super 直接到父类当中去找
        //使用super可以访问父类被隐藏的字段
        System.out.println(this.name);
        System.out.println(super.name);
    }

    public static void main(String[] args) {
        SubClass one =new SubClass();
        one.test();
        
        SubClass.test1();
        SuperClass.test1();

    }
    /**
     * 隐藏:
     * 1.隐藏父类当中的字段  子类当中和父类当中有相同的字段   继承字段隐藏     super.字段
     * 2.隐藏父类的静态方法  子类和父类有相同的静态方法,
     * 3.本类字段隐藏   方法参数和本类字段名相同        this.字段
     */

}

Object类

toString();方法使用 要覆盖原来Object类的方法

相关文章

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • 王艳华Pythonday03

    Python的面向对象 Java 面向对象 继承

  • Python面向对象继承

    面向对象继承 面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象...

  • java基础-day10-面向对象4.0

    面向对象4.0 1. 面向对象之继承 1.1 生活中的继承 1.2 Java中的继承 1.3 子类对象创建,会调...

  • 面对对象高级编程

    面向对象高级编程: 面向对象编程:封装、继承和多态 面向对象高级编程:多重继承、定制类和元类

  • Web前端经典面试试题及答案2

    javascript面向对象中继承实现? 面向对象的基本特征有:封闭、继承、多态。在JavaScript中实现继承...

  • JAVA语言第二课

    JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...

  • js面向对象设计

    面向对象模式 继承

  • JavaScript 面向对象编程

    JavaScript 快速入门 面向对象编程创建对象构造函数忘记写new怎么办?原型继承class继承 面向对象编...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

网友评论

    本文标题:面向对象-继承

    本文链接:https://www.haomeiwen.com/subject/opowtqtx.html