public class Father{//定义父类
public void s(){//定义父类的方法s
}
}
public class Son extends Father{//定义子类son,继承父类father
public void s(){//定义子类的s方法,覆盖了父类的s方法
super.s();//通过super调用父类的s方法
}
}
首先,super要在类的声明中调用,再创建的对象中无法通过 对象名.super来进行。
想要用C类调用A类中的方法,就要在类声明的时候下功夫;
class A {
public void xxx(){
System.out.println("A");
}
}
class B extends A {
public void xxx(){
System.out.println("B");
}
public void A_xxx() { //用A_xxx()方法调用A类中的xxx()方法
super.xxx();
}
}
class C extends B {
public void xxx(){
System.out.println("C");
}
public void B_xxx() { //用B_xxx()方法调用B中的xxx()方法
super.xxx();
}
}
类中的代码就这样了,
使用的时候:
C c = new C();
c.A_xxx();
c.B_xxx();
由于方法已经被重写,在创建对象之后是无法加以访问的,必须在类中创建新的方法来调用
根据:
new 抽象类名或者接口名(){
重写方法;
}
可得:
class C extends B {
public void xxx() {
new A(){}.xxx();
}
}
以上代码的意思为:
由于A为抽象类,要能够在C的xxx()方法实例化一个A的子类并在里面创建该子类的对象调用A的xxx()方法才能访问A的方法,如下:
class C extends B{
public void xxx() {
class test extends A{
}
Test t = new Test();
t.xxx();
}
}
又根据以上匿名内部内的公式,可简化成:
class C extends B {
public void xxx() {
new A(){}.xxx();
}
}
注意:A中没有抽象方法,所以大括号里面不需要重写xxx()方法.
综上可得:
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
C cc = new C();
cc.xxx();
}
}
abstract class A extends Object {
public void xxx() {
System.out.println("A");
}
}
abstract class B extends A {
public void xxx() {
System.out.println("B");
}
}
class C extends B {
public void xxx() {
new A() {
}.xxx();
}
}