JavaWeb程序员

面向对象-继承

2018-11-01  本文已影响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类的方法

上一篇下一篇

猜你喜欢

热点阅读