面向对象的三大特征——继承性(一)

继承类(成员变量成员方法访问特点)


概念:

继承是指在已存在的类的基础上扩展产生新的类。已存在的类称为基类(或父类、基类、超类),新产生的类称为子类(或派生类)。

注解: 就相当于一位师父会九阳真经,长虹贯日;其大徒弟,二徒弟在师父不断教导下也会九阳真经与长虹贯日。注意此处继承与子承父业不完全一样 


意义:

继承是面向对象程序设计的三大特征(封装、继承和多态)之一,不具有继承功能的语言不能称之为面向对象程序设计语言(如VB)。其中解决的主要问题就是:共性抽取。


特点:

  • 子类可以拥有父类的“内容”
  • 子类可以拥有自己专有的“内容”

注解:类比一下学校中,对于学校领导,老师,员工,他们都存在姓名与工号(这些就是可以继承的内容),但是他们每个人所在学校的行为却不一样(这就是他们自己专有的内容。 


使用方法:

package cn.kobe.day01.demo01;

/*
在继承关系中:“子类就是一个父类”。也就是说,子类可以被当作父类看待。
例如:父类是员工,子类是讲师,那么“讲师就是一个员工”。
        关系:is-a (Speaker is a Employee.)

定义父类的格式:(一个普通的类定义)
public class 父类名称{
    
}

定义子类的格式:
public class 子类名称 extends 父类名称{
    //...
}
*/

public class DemoExtend {

}

访问方式:


1.子类父类没有重名

直接访问,访问谁就直接调用谁。

package cn.kobe.day01.demo01;

public class DemoNum_Main {
    public static void main(String[] args) {
      Father father = new Father();
      System.out.println(father.num01);
      Sun sun = new Sun();
      System.out.println(sun.num01);
      System.out.println(sun.num02);
    }
}

 Father类

package cn.kobe.day01.demo01;

public class Father {
    int num01 = 10;
}

Sun类 

package cn.kobe.day01.demo01;

public class Sun extends Father {
    int num02 = 20;
}

结果 

10
10
20

2.子类父类存在重名 

在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

  1. 直接通过子类对象访问成员变量:等号左边是谁就直接访问谁,没有则向上找;
  2. 间接通过成员方法访问成员变量:该方法属于谁就优先用谁,没有就想上找。

 1.重名成员变量一个在父类,一个在子类


Main

package cn.kobe.day01.demo01;

public class DemoNum_Main {
    public static void main(String[] args) {
      Father father = new Father();
      System.out.println(father.num01);
      Sun sun = new Sun();
      System.out.println(sun.num01);
      System.out.println(sun.num02);
      System.out.println("==================");
      //存在重名
      //等号左边是谁就直接访问谁,没有则向上找
      System.out.println(sun.num);
//    System.out.println(sun.abc); //找不到则报错
      System.out.println("==================");
      //这个方法是子类的,优先使用子类的,没有再向上找
      sun.methodSun();//200
      //这个方法是在父类当中定义的
      sun.methodFather();//100
    }
}

Father

package cn.kobe.day01.demo01;

public class Father {
    int num01 = 10;
    int num = 100;
    public void methodFather(){
        //使用本类当中的,不会向下找子类
        System.out.println(num);
    }
}

Sun

package cn.kobe.day01.demo01;

public class Sun extends Father {
    int num02 = 20;
    int num = 200;
    public void methodSun(){
        //因为本类有num,所以这里用的是本类的
        System.out.println(num);
    }
}

结果

10
10
20
==================
200
==================
200
100

 2.重名成员变量在三处

  1. 局部变量 :直接写成员变量名
  2. 本类的成员变量 :this.成员变量名
  3. 父类的成员变量 :super.成员变量名

Main

package cn.kobe.day01.demo02;

/*局部变量        直接写成员变量名
本类的成员变量   this.成员变量名
父类的成员变量   super.成员变量名*/

public class DemoNumFiled {
    public static void main(String[] args) {
        Sun sun = new Sun();
        sun.method();
    }
}

Father

package cn.kobe.day01.demo02;

public class Father {
    //父类的成员变量 :super.成员变量名
    int num = 100;
}

Sun

package cn.kobe.day01.demo02;

public class Sun extends Father{
//  本类的成员变量 :this.成员变量名
    int num = 200;
    public void method(){
//      局部变量 :直接写成员变量名
        int num = 300;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}

注意:

在父类的继承关系当中,创建子类对象,访问成员方法的规则:
创建的对象是谁就优先用谁,没有则向上找。

无论是成员方法还是成员变量,如果没有,都是向上找,绝对不会向下找子类

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值