容易犯错的问题点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容易犯错的问题点相关的知识,希望对你有一定的参考价值。
1.我们都知道protected类型的方法或者域, 可以被同包下的其他类访问, 或者该类的子类访问. 除了这两种情况都不能访问protected权限的字段或者方法. 其实这句话只是笼统地说了下protected的作用, 并不完全对, 看代码
package parent;
/**
* Created by xinfengyao on 17-1-15.
*/
public class Parent {
protected int i;
protected void print() {
System.out.println("parent中protected权限的print()方法");
}
}
package sub;
import parent.Parent;
/**
* Created by xinfengyao on 17-1-15.
*/
public class Sub1 extends Parent {
protected void sub1Print() {
System.out.println("sub1Print");
}
public static void main(String[] args) {
Parent parent = new Parent();
parent.print();
System.out.println(parent.i);
Sub1 sub1 = new Sub1();
sub1.print();
System.out.println(sub1.i);
}
}
idea显示编译出错:
我们看到Parent类和它的子类Sub1是在不同包中的, 在子类Sub1中, 不能通过父类类型的变量访问父类中的protected成员和protected方法. 但是可以通过子类类型变量访问从父类那继承过来的protected成员和方法.
在看段代码:
package sub;
import parent.Parent;
/**
* Created by xinfengyao on 17-1-15.
*/
public class Sub2 extends Parent {
public static void main(String[] args) {
Sub1 sub1 = new Sub1();
sub1.print();
System.out.println(sub1.i);
sub1.sub1Print();
Sub2 sub2 = new Sub2();
sub2.print();
System.out.println(sub2.i);
}
}
idea也编译报错:
因此我们可知, 在子类中, 不能访问兄弟类(即直接父类是同一个类)中从父类那继承过来的protected方法, 但是可以访问同一包下的兄弟类中自己创建的protected方法.
总结:
(1). 子类中不能通过父类类型的变量, 访问父类中的protected方法和成员, 只能通过本身类型的变量访问从父类那继承过来的protected方法和成员
(2). 子类中不能访问兄弟类中从父类那继承过来的protected方法, 但是可以访问同一包下兄弟类自己新增的protected方法
以上是关于容易犯错的问题点的主要内容,如果未能解决你的问题,请参考以下文章
朱晔和你聊Spring系列S1E6:容易犯错的Spring AOP