继承的用法和意义

**

继承的用法及意义

**
OOP中两个类常有的关系有两种:
1.组合关系:满足a part of… 一部分 一个类定义的对象称为另一个类的成员变量 has a…的关系
A类是B类的一部分,A和B就设计成组合关系,设计如下:
class A{}
class B{
A a; // B组合了A对象
public B{
this.a = new A():
}
}
2.继承关系:满足 a kind of… 一种的关系 用extends继承 is a…的关系 A是一个已经定义的类,B是A的一种,那么设计成继承关系,如下:

class A{}
class B extends A {
}

继承的意义之一:代码的复用

this关键字的两种用法:
1.在构造函数中调用如 this(10),调用待int参数的其它的构造函数
2.在成员方法里面访问其它成员,前面可以添加this.

super关键字的三个用法:
1.在派生类的构造函数中,调用super(10),调用基类的带int参数的构造函数
2.super.func() 在派生类中,调用从基类继承来的func方法
3.super.a 在派生类中,调用从基类继承来的名字叫a的成员变量

this和super关键字都和对象有关,所以在static方法中不能使用这两个关键字

private和protected的区别?
1.它们两个修饰的成员,在类的外部都不能访问
2.基类的private成员,在派生类中无法访问;基类的protected成员,在派生类中可以访问

继承方法的具体实现

  B b1 = new B();
        B b2 = new B(); //静态块初始化属于类级别初始化,每次打印只初始化一次

        b1.test();
    }
}

class A{
    protected int a;

    static{
        System.out.println("A static block init.");
    }

    {
        System.out.println("A instance block init.");
    }

    public A(){
        System.out.println("A()");
        this.a = 0;
    }

    public A(int a){
        System.out.println("A(int)");
        this.a = a;
    }

    public void show(){
        System.out.println("A.show a:" + a);
    }
}

/**
 * 派生类B有两部分
 * 1.从基类继承来的成员
 * 2.自己定义的成员
 *
 * super和this都必须写在第一行
 */
class B extends A{
    private int b;
    private int a;

    static{
        System.out.println("B static block init.");
    }

    {
        System.out.println("B instance block init.");
    }

    public B(){
        // 如何在派生类中调用基类的构造函数呢?    super方法调用!!
        super(); // A()  a = 0
        System.out.println("B()");
    }

    public B(int data){
        super(data); // A(int) a = data
        System.out.println("B(int)");
    }

    public void show(){ // 作用域不同   show   A.show   a  A.a
        System.out.println("B.show a:" + super.a);
    }

    void test(){ // 测试方法
        // 在派生类中,调用基类的方法
        super.show();
    }

打印结果:
第二次NEW的对象并没用打印静态方法,说明静态块初始化属于类级别初始化,每次打印只初始化一次

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值