当前位置: 代码迷 >> J2SE >> 经过向上转型可以调用父类中定义final的方法吗
  详细解决方案

经过向上转型可以调用父类中定义final的方法吗

热度:90   发布时间:2016-04-23 19:43:00.0
通过向上转型可以调用父类中定义final的方法吗?
/*class Parent{
private final void doit(){
System.out.println("父类doit");
}
final void doit2(){
System.out.println("父类doit2");
}
private final void doit3(){
System.out.println("父类doit3");
}
}
class Sub extends Parent{
public final void doit(){
System.out.println("子类doit");
}
public final void doit3(){
System.out.println("子类doit3");
}
}
public class Test{
public static void main(String[]args){
Sub s=new Sub();
Parent p=s;
p.doit2();
}
}*/
------解决思路----------------------
final修饰符定义一个方法,表示这个方法不能被重写,子类中仍然继承了这个方法,可以通过子类访问这个方法

另private是访问修饰符,用它修饰方法表示只有本类成员才能访问该方法

------解决思路----------------------
向上转型 只是 用一个父类的引用引用一个子类的实例

public class Test{
public static void main(String[]args){
Sub s=new Sub();
Parent p=s;// 用一个父类的引用引用一个子类的实例
p.doit2();//变量p声明为Parent类型,Parent类定义了doit2(),这个方法的修饰符final,说明不能被重写,编译器就定位到这个方法调用
}

------解决思路----------------------
为什么要转型?如果public方法,子类的引用也可以访问这个方法,和父类的引用访问一模一样。除非父子类不在一个包里,而且修饰符是default的或者protect,那才有些访问区别。
------解决思路----------------------
引用:
Quote: 引用:

为什么要转型?如果public方法,子类的引用也可以访问这个方法,和父类的引用访问一模一样。除非父子类不在一个包里,而且修饰符是default的或者protect,那才有些访问区别。
  你在继续看看书把  

醉了,我这个10多年的java老鸟,现在一时半会还找到java书了呢。。。赶紧去当当订一本。
------解决思路----------------------
引用:
Quote: 引用:

为什么要转型?如果public方法,子类的引用也可以访问这个方法,和父类的引用访问一模一样。除非父子类不在一个包里,而且修饰符是default的或者protect,那才有些访问区别。
  你在继续看看书把  


不转型一样可以访问
class Parent {
private final void doit() {
System.out.println("父类doit");
}

final void doit2() {
System.out.println("父类doit2");
}

private final void doit3() {
System.out.println("父类doit3");
}
}

class Sub extends Parent {
public final void doit() {
System.out.println("子类doit");
}

public final void doit3() {
System.out.println("子类doit3");
}
}

public class Test {
public static void main(String[] args) {
Sub s = new Sub();
s.doit2();
}
}

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

为什么要转型?如果public方法,子类的引用也可以访问这个方法,和父类的引用访问一模一样。除非父子类不在一个包里,而且修饰符是default的或者protect,那才有些访问区别。
  你在继续看看书把  


不转型一样可以访问
class Parent {
private final void doit() {
System.out.println("父类doit");
}

final void doit2() {
System.out.println("父类doit2");
}

private final void doit3() {
System.out.println("父类doit3");
}
}

class Sub extends Parent {
public final void doit() {
System.out.println("子类doit");
}

public final void doit3() {
System.out.println("子类doit3");
}
}

public class Test {
public static void main(String[] args) {
Sub s = new Sub();
s.doit2();
}
}

你瞎说,肯定不能访问,赶紧去看书。。另外你的编译器出错了,这个应该编译不过的。
  相关解决方案