《类的继承》

一、什么是继承?

继承是有上一个类,可以拿来使用,不用重新把已有类的内容再次书写一遍。已有的类被称为父类,新的类被称为子类。如同活字印刷术,需要的时候只要调用出以后的模板字就行,不需要再次刻画字体的。

类的定义格式:
clas 子类名 extends 父类名{
属性和方法
}

在java 中使用extends关键字来表示两个类之间的继承关系。

package demo;
//定义父类
 class Parent {
    String name;
    double property;
    public void Say(){
        System.out.println(name+"的财产"+property);
    }
}
//子类Child继承父类
class Child extends Parent {
    int age;
    public void sayage(){
        System.out.println(name+"的年龄"+age);
    }
}
public class TestExtends {
    public static void main(String[] args) {
        Child c= new Child();
        c.name="小明";
        c.property=100;
        c.age=20;
        c.Say();
        c.sayage();
    }

在上述代码中Child通过extends关键字继承Parent的类,而Child不仅继承了Parent的类方法还自己进行了age年龄的扩展,定义了一个sayAge()方法,说明了子类扩展父类功能。

多层父类的继承:在Java中不支持多重继承,但支持多层的继承,就是说一个类的父类可以继承其他的父类,因此一个类中存在一个类的间接的多层父类。

class A{ }

class B extends A{ }

class C extends B{ }

二、重写父类:

在继承关系中,子类从父类中继承了可访问的方法,但是有时候继承下来的方法无法满足我们的需求,如下中显示,如果要求父类与子类的say()方法输出不同的内容,这时就可以在子类的方法中对父类的进行修改,就是在子类中重新定义父类中的变量。就是用子类对父类的代码进行覆盖,但这里我们要考虑的是父类的权限的问题,是否对子类的禁止修改的或者覆盖的问题。

package demo;
//定义父类
class Parent2{
    protected void say(){
        System.out.println("父类");
    }
}
//子类继承父类
 class Child2 extends Parent2 {
    public void say(){
        System.out.println("子女");
    }
}
public class TestOverride{
    public static void main(String[] args) {
        Child2  c =new Child2();
        c.say();
    }
}
super关键字:

在上述的子类重写父类方法中,子类对象将无法访问父类被重写的方法。如果在子类中需要访问父类的被重写的方法,可通过super关键字的实现。

格式如下:

super.成员变量

super.成员方法([实参列表])

示例代码如下:
package demo;
class Parent3{
    String name ="Parent";
    protected void say(){
        System.out.println("父类");
    }
}
//子类继承父类
class Child3 extends Parent3 {
    public void say(){
        String name = super.name;
        super.say();
        System.out.println("姓名"+name);
    }
}
public class TestSuper{
    public static void main(String[] args) {
        Child3  c =new Child3();
        c.say();
    }
}

super.p()很明显是作为对象使用的,这里就代指父类的原型对象,而p方法是定义在A的原型上面的,所以返回值是2。理所当然调用b.m就取不到值。
这也从侧面说明:constructor()方法一般情况下就是只A本身,而类中的一般方法是定义在类的原型对象上的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值