Java面向对象之继承

面向对象编程的特点:
                                        1、可维护性
                                        2、可扩展性
                                        3、可移植性(可重用性)
                                        4、灵活性好

一、继承  


        继承就是为了重用代码。
                        

 

 二、继承的语法


class 子类 extends 父类 {
​​​​​​​
}

注意:

1.Java只支持单继承,不支持多继承。

2.Java支持多层(重)继承(继承体系)。

3.继承关系一般不希望超过三层,如果超过那么就考虑重构了

三、继承的内容 


​​​​​​

       父类的私有的属性和行为都不能继承,其余都可以。

1.  父类和子类成员变量不同名

 

​
 //不存在同名的情况
    class Father {
        int a;
        int b;
    }

    class Son extends Father {
        int c;

        public void func() {
            a = 10;
            b = 20;
            c = 30;
        }
    }
}


​

         在这里a,b直接访问的父类继承下来的a,b,能够直接进行赋值

2. 父类和子类成员变量同名

 

 //父类和子类成员变量同名
    class Father {
        int a;
        int b;
    }

    class Son extends Father {
        int a;
        int b;
        int c;

        public void func() {
            a = 10;
            b = 20;
            c = 30;
        }
    }

        在这里a,b访问的是子类中的a,b

总结:

1.如果访问的成员变量如果子类有,优先访问子类的。

2.如果子类中无,则访问父类中的,如果父类也没有,则编译失败. 

3.如果访问子类父类中都有,则优先访问子类的,采用的就是一个就近原则

 

3.如果同名要访问父类成员方法

 

        访问父类的成员:

    class Father {
        int a;
        int b;
    }

    class Son extends Father {
        int a;
        int b;
        int c;

        public void func() {
            super.a = 10;
            super.b = 20;
            c = 30;
        }
    }

        访问父类的方法:

   class Father {
        public void func1() {
            System.out.println("Father: func1");
        }
    }

    class Son extends Father {
        public void func1() {
            System.out.println("Son: func1");
        }

        public void func2() {
            System.out.println("Son: func2");
        }

        public void func3() {
            super.func1();
            func2();
        }
    }

        在这里我们可以用super来指代父类,否则就会遵循就近原则直接访问子类的成员。

 

注意:

1.super只能在非静态方法中使用

2.在子类方法中,访问父类的成员变量和方法

4.super和this

相同点:

                1.super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)

                2.super和this的用法相似。

                3.this代表对象的引用(谁调用就代表谁);

                4.super代表当前子类对父类的引用。

                5.super();和this();都是在构造函数的第一行,不能同时出现。

 

不同点:

1.成员变量

this.变量        本类的super.变量       父类的

2.构造方法

this(...)        本类的super(...)       父类的

3.成员方法

this.方法名()        本类的    super.方法名()       父类的

 

5.继承代码块执行顺序

                1.父类静态代码块优先执行,然后子类静态代码块执行,静态代码块只执行一次

                2.在实例子类对象时,父类实例代码块和父类构造方法紧接着执行.

                3.子类的实例代码块和子类构造方法再执行

四、小结


  • 通过继承可以重用代码
  • 可以规范子类的一些行为
  • 通过继承还可以实现动态的多态.
扩展:
        通过父类的引用依然可以指向子类的对象.(灵活性好)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值