Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

1.访问修饰符

(1)private:只允许在本类内进行访问;

(2)public:只要能正确加载public成员所在的类型的对象,那么就可以通过这个类型的对象去访问到public成员;即允许在任意位置访问;

(3)protected:允许在当前类进行访问;同包中的子类可以访问(即子类会继承父类中的protected成员);不同包(跨包)的子类也可以访问(和同包的情况相同);同一个包中的其他类(非子类)可以访问;

跨包的非子类不能访问:

即protected说白了就是,同包中的任何类都可以访问;不同包时,只有子类才能访问。

(4)默认的访问权限,什么都不加:允许在当前类访问;跨包子类不允许访问;同包的子类可以访问;同包的非子类也可以访问;

即默认访问权限是,只有同包才能访问;不同包时,无论是否是子类都不可以访问;

注:对于什么业务场景,使用访问修饰符,这个需要在实际业务中提高选定能力。

2.子类重写方法的访问修饰符

子类重写的方法的访问范围要  >= 父类方法的访问范围;


注加:

注:20200922 (1)子类重写父类中的方法,要保持方法返回值类型不能变;(方法的重载,必须是方法的参数个数、顺序或类型不同才可以,,这样以后,重载方法的访问修饰符是什么就无所谓了)


3.super关键字

(1)super关键字基本用法

super.成员属性   或   super.成员方法:可以在子类中调用父类的成员;(当然得是子类有访问权限的成员)

如:(图片又臭又长,看个意思就行)

注:当在子类中使用super关键字后,会在堆中新建一个父类对象的;其实,如果在子类中不写super,也会默认调用父类的无参构造方法的

如果不使用super关键字,则是默认访问本类中的方法了:(就近?或子类已经重写了,当然选择子类的)

假如子类没有重写父类的eat()方法,其自然会“调用父类的eat()方法”,因为子类已经继承父类的eat()的方法了,虽然在子类中没有显示地写出eat()方法,但eat()已经是子类的成员方法了。(这样一看,上面的所谓就近的说法就是错误的了,子类继承父类的成员方法,子类可以选择重写,也可照搬不重写,无论如何,子类都有了父类成员方法的一个拷贝(说法可能不准确),不使用super关键字,调用的都是子类中的方法;;;只有使用了super关键字后才是调用的父类中的方法)

(2)super关键字不能在main()方法中使用

因为main方法时static修饰的静态方法,而在静态方法中无法预支对象;静态先于对象,this指示当前类对象,super指示父类对象。(在super的使用场景中,super(好像、大概、也许、可能)需要依附于一个对象,)

(这个还不太明白,,,,,)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值