下面是两段代码:(一):package pkg1;public class A{
protected void go(){
System.out.println("A");
}
}
//==================================================请注意A,B两类不同包
package pkg2;import pkg1.A;public class B extends A{
public void test(){
A a = new A();
a.go();//B是A的子类,在B类中调用父类A的protected方法会有问题吗?
}
}
(二):package pkg1;
import pkg2.B;public class A{
protected void go(){
System.out.println("A");
} public void test(){
B b = new B();
b.go();//B是A的子类,在父类A类中调用子类B的protected方法会有问题吗?
}
}//==================================================请注意A,B两类不同包package pkg2;import pkg1.A;public class B extends A{
}
请选择:A. (一)编译通过,(二)编译通过
B. (一)编译通过,(二)编译不通过
C. (一)编译不通过,(二)编译通过
D. (一)编译不通过,(二)编译不通过
protected void go(){
System.out.println("A");
}
}
//==================================================请注意A,B两类不同包
package pkg2;import pkg1.A;public class B extends A{
public void test(){
A a = new A();
a.go();//B是A的子类,在B类中调用父类A的protected方法会有问题吗?
}
}
(二):package pkg1;
import pkg2.B;public class A{
protected void go(){
System.out.println("A");
} public void test(){
B b = new B();
b.go();//B是A的子类,在父类A类中调用子类B的protected方法会有问题吗?
}
}//==================================================请注意A,B两类不同包package pkg2;import pkg1.A;public class B extends A{
}
请选择:A. (一)编译通过,(二)编译通过
B. (一)编译通过,(二)编译不通过
C. (一)编译不通过,(二)编译通过
D. (一)编译不通过,(二)编译不通过
protect是保护的类型只能在子类总使用
protected可以被同包下和子类访问
A a = new A();
a.go();//B是A的子类,在B类中调用父类A的protected方法会有问题吗?
这里不能用A的对象a调用go()只能用this.go()调用。B不能看到A的方法,只能看到super的方法。不是所有的A都是他父亲,他只能用自己从自己父亲那里继承过来的go方法。
选C
1、B继承了A,但是创建A的对象是不能调用A中受保护的方法的。只能在子类和同包下的才可以。
不过在B中可以用this调用;new A().go()不行
2、编译通过,B继承了A。b调用a中的方法当然是可以的,不管是啊B类中调用还是new B().go()都是可以的。
protected void go(){;}
}这样B还是继承了A,只不过覆盖了go方法。你再在A类中new B().go(),看看效果
至于
根据继承特性,你在B中重写了go()方法,在new的过程中将调用本类的go()
而protected---只有同一个包或者其子类调用也并不冲突
另外面试这种问题真的很无聊,哪家做软件这么较真!都是用publc和private
这么细粒度啊安全机制谁会考虑,你在考虑这个的时候,人家四五套软件已经出来了!
考虑的公司早倒闭了!
A a = new A();
a.go();1.包外子类中调用的protected方法,这里是指调用这个动作发生所处在的类,是B,它是A的子类,没错
2.引用a,这是一个关键对象,因为是它invoke了protected方法go,它的type是A,B没有参与它的实现(因为是子类,反之A是参与了B的实现,如果类型是B,那B也自然是参与了其实现)第二个条件没有达到,所以编译不通过