首页 > 代码库 > 容易犯错的问题点
容易犯错的问题点
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方法
容易犯错的问题点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。