Java中继承的详解(下)

继承

1.1 protected关键字

为了实现java的封装特性,java中设置了访问修饰限定符,主要限定:类或者类中成员能否在类外或者其 他包中被访问

范围privatedefaultprotectedpublic
1同一包中的同一类
2同一包中的不同类
3不同包中的子类
4不同包的非子类

那父类中不同访问权限的成员,在子类中的可见性又是什么样子的呢?

// extend01包中
public class B {
    private int a;
    protected int b;
    public int c;
    int d;
}


// extend01包中
// 同一个包中的子类
public class D extends B{
    public void method(){
    // super.a = 10; // 编译报错,父类private成员在相同包子类中不可见
    super.b = 20; // 父类中protected成员在相同包子类中可以直接访问
    super.c = 30; // 父类中public成员在相同包子类中可以直接访问
    super.d = 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问
    }
}

// extend02包中
// 不同包中的子类
public class C extends B {
	public void method(){
	// super.a = 10; // 编译报错,父类中private成员在不同包子类中不可见
	super.b = 20; // 父类中protected修饰的成员在不同包子类中可以直接访问
	super.c = 30; // 父类中public修饰的成员在不同包子类中可以直接访问
	//super.d = 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问
	}
}


// extend02包中
// 不同包中的类
public class TestC {
    public static void main(String[] args) {
    C c = new C();
    c.method();
    // System.out.println(c.a); // 编译报错,父类中private成员在不同包其他类中不可见
    // System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问
    System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
    // System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问
	}
}

这里我们要注意父类中private成员变量虽然在子类中不能直接访问但是也继承到子类中了.

1.2 继承方式

Java中只支持以下几种继承方式:

  • 单继承:即子类不能继承多个父类,只能继承一个父类
  • 不同类继承同一个类:即一个父类可以被多个子类继承。
  • 多层继承:即继承可以进行嵌套继承。

注意Java中不能实现多继承即一个类只能继承一个父类

1.3 final关键字

final关键可以用来修饰变量成员方法以及

【修饰变量或字段】:被final修饰的变量或字段就成为了常量。其值不能被更改。

final int a = 10;
a = 20;//编译出错

【修饰类】表示此类不能被继承

final public class Animal {
    ...
   }
   

public class Bird extends Animal {//编译出错
    ...
   }

【修饰方法】:表示该方法不能被重写

1.4 组合

组合并没有特别的关键字,只是将一个类的实例作为另外一个类的字段。

例如:汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合,因为汽车是有这些部件组成的。

// 轮胎类
class Tire{
    // ...
  }
  

// 发动机类
class Engine{
    // ...
  }


// 车载系统类
class VehicleSystem{
    // ...
   }


class Car{
    private Tire tire; // 可以复用轮胎中的属性和方法
    private Engine engine; // 可以复用发动机中的属性和方法
    private VehicleSystem vs; // 可以复用车载系统中的属性和方法
    // ...
}


// 奔驰是汽车
class Benz extend Car{
    // 将汽车中包含的:轮胎、发送机、车载系统全部继承下来
  }

建议能用组合就用组合

1.5 总结

本章的内容就到这里啦,若有不足,欢迎评论区指正,最后,希望大佬们多多三连吧,下期见!

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这里是彪彪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值