📄 abstractmethoddemo.java
字号:
//【例4-17】 抽象方法与抽象类的关系与应用。
//程序清单4-17: AbstractMethodDemo.java
package e4_17;
public class AbstractMethodDemo {
public static void main(String args[]) {
A obja;// 抽象类A只能用来声明对象引用
// obja = new A(); //抽象类A不能实例化
B objb;
// objb = new B(); //抽象类B不能实例化
C objc = new C();// 只能用实现了抽象类的子类C实例化
objc.add(10, 10);
objc.subtract(10, 1);
objc.Multiply(10, 10);
objc.Divide(10, 10);
// obja是objb和objc的上转型对象,objb是objc的上转型对象
obja = objb = objc;
objb.add(100, 100);
objb.subtract(100, 10);
objb.Multiply(100, 100);
// objb.Divide(100, 100);//上转型对象不能调用子类新增成员
obja.add(1000, 1000);
obja.subtract(1000, 100);
// obja.Multiply(1000, 1000);//上转型对象不能调用子类新增成员
}
}
abstract class A { // 含有抽象方法的类必须定义为抽象类
abstract void add(int x, int y);// 抽象方法声明add()
// 抽象方法不能声明为final类型
abstract void subtract(int x, int y);
}
// 子类B没有完全实现父类A中的抽象方法,则只能定义为抽象类
abstract class B extends A {// 类B继承类A
// 覆盖抽象类A的方法 void add(int x, int y)
void add(int x, int y) {
System.out.println(x + " + " + y + " = " + (x + y));
}
void Multiply(int x, int y) {// 子类B新增的方法
System.out.println(x + " * " + y + " = " + (x * y));
}
}
// 子类C实现了间接父类A的抽象方法abstract int subtract(int x, int y)
class C extends B {// 类C继承类B
void subtract(int x, int y) {
System.out.println(x + " - " + y + " = " + (x - y));
}
void Divide(int x, int y) {// 子类C新增的方法
System.out.println(x + " / " + y + " = " + (x / y));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -