继承!!!

本文详细介绍了面向对象编程中的继承概念,包括继承的原理、形式(单继承和多重继承)、Java中的继承实现(extends关键字),以及成员变量访问规则,特别关注了变量重命名时的处理方式。
摘要由CSDN通过智能技术生成

一、继承的概述:

1、面向对象的三大特征:封装性、继承性、多态性。

2、继承是多态的前提,如果没有继承,就没有多态。

3、继承主要解决的问题就是:共性抽取

4、继承关系中的特点:

(1)子类可以拥有父类的“内容”;

(2)子类还可以拥有自己专有的内容;

(3)继承关系具有传递性。若类C继承类B,类B继承类A,则类C拥有从类B继承的属性与方法,也拥有从类A继承的属性和方法,还能定义新的属性和方法。

(4)具有多种继承形式。①多重继承,即理论上一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性和方法。②单继承,即一个子类只能有唯一的一个父类。 Java出于安全性和可靠性考虑,类之间仅支持单继承,通过接口机制实现多重继承。

二、继承的格式:

Java通过extends关键字实现继承。

定义子类【语法格式】 继承

class  子类名  extends 父类名{
     //类体
}

定义父类格式:一个普通的类定义。

例子:

package com.jsu.tmy;

//定义一个父类,员工
public class Employee {
    public void method(){
        System.out.println("方法执行!");
    }
}
package com.jsu.tmy;
//定义了一个员工的子类,讲师
public class Teacher extends Employee{
}

package com.jsu.tmy;
//定义了员工的另一个子类,助教
public class Assistant extends Employee{
}
package com.jsu.tmy;

public class Main {
    public static void main(String[] args) {
        //创建了一个子类对象
        Teacher teacher = new Teacher();
        //Teacher类当中虽然什么都没写,但是会继承来自父类的method方法。
        teacher.method();
        Assistant assistant = new Assistant();
        //Assistant类当中虽然什么都没写,但是会继承来自父类的method方法。
        assistant.method();
    }
}

Main方法的运行结果:

三、成员变量的访问

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

①直接通过子类对象访问成员变量;

    创建子类对象时,等号左边是谁,就优先用谁,没有则向上找父类的。

②间接通过成员方法访问成员变量。

    该方法属于谁(定义在父类中还是子类中),就优先用谁,没有则向上找。

package com.jsu.tmy;

public class ExtendsField {
    public static void main(String[] args) {
        Fu fu = new Fu();  //创建父类对象
        System.out.println(fu.numFu);  //只能使用父类的东西,没有任何子类内容
        System.out.println("=========");

        Zi zi = new Zi();  //创建子类对象
        System.out.println(zi.numFu); //10
        System.out.println(zi.numZi); //20
        System.out.println("=========");

        //等号左边是谁,就优先用谁
        System.out.println(zi.num);
        System.out.println("=========");

        //这个方法是子类的,优先使用子类的,没有再向上找
        zi.methodZi();  //200
        //这个方法是在父类中定义的
        zi.methodFu();  //100
    }
}
public class Fu {
    int numFu = 10;
    int num = 100;
    public void methodFu() {
        //使用的是本类当中的num,不会向下找子类的
        System.out.println(num);
    }
}

 

package com.jsu.tmy;

public class Zi extends Fu{
    int numZi = 20;
    int num = 200;
    public void methodZi() {
        //因为本类当中有num,所以这里用的是本类的num
        System.out.println(num);
    }
}

运行结果:

四、变量重名;

当变量重名时若要使用     局部变量     ----> 直接写成员变量名

                                     本类的成员变量---->this.成员变量名

                                     父类的成员变量---->super.成员变量名

package com.jsu.tmy;

public class ExtendsField {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method();

    }
}
package com.jsu.tmy;

public class Fu{
    int num = 10;

}

package com.jsu.tmy;

public class Zi extends Fu {
    int num = 20;
    public void method(){
        int num = 30;
        System.out.println(num);  //30, 局部变量
        System.out.println(this.num);  //20, 本类中的成员变量
        System.out.println(super.num);  //10, 父类的成员变量
    }
}

运行结果;

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值