和cpp一样,不一样的是Java可以使用super.xxx去调用父类的构造函数和成员函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import java.math.BigDecimal; import java.math.BigInteger; import java.text.DecimalFormat; import java.util.*; public class Main { static void solve(Scanner sc) { var a = new BigInteger("11234"); var b = new BigInteger("3421"); System.out.println(a.compareTo(b)); } record Move(int k, int pos) {} public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { int t = 1; while (t-- > 0) { solve(scanner); } } } class Test { public Test() { System.out.println("T1"); } public void work() { System.out.println("TT1"); } } 3 class T2 extends Test { public T2() { super(); System.out.println("T2"); } @Override public void work() { super.work(); System.out.println("TT2"); } } }
|
和cpp一样,在子类创建时自动调用父类无参构造函数,想调用带参数的必须使用super显示实例化
Object 类
Object 类是Java所有类的父类,所有类都由它继承而来,所以可以省略externs Object,它包含了一系列方法
- equals
- toString
- getClass()
注意getClass,notify,notifyAll等都是final类型,不能重写
类的类型转换
和cpp一样,注意类向下要强制显式类型转换
instanceof操作符号判断对象类型
在程序执行向下转型时,如果父类对象不是子类的实例,就会发生ClassCastException异常, 所以在向下转型的时候要判断转型的是否是当前类的实例,用法
1
| myObject instanceof ExampleClass
|
- myObject 某个类的对象引用
- ExampleClass, 某个类
- 返回值是Boolean, true说明myObject 是ec的实例,
抽象类和接口
抽象类
语法:
1 2 3
| public abstract class Test { abstract void testAbstract(); }
|
接口
接口是抽象类的延申,他说存粹的抽象类,接口中所有的方法都没有方法体
1 2 3
| public interface draw { void draw(); }
|
- interface关键字定义接口
- 注意所有的方法必须是public或者是abstract类型,即使不声明也是默认public
- 接口中定义的任何字段都是static和final的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| interface MyInterface { int VALUE = 10; }
class MyClass implements MyInterface { int VALUE = 20;
void printValues() { System.out.println("VALUE from MyClass: " + VALUE); System.out.println("VALUE from Interface: " + MyInterface.VALUE); } }
public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); obj.printValues(); } }
|
接口与继承
使用implements关键字可以调用接口
1
| class A extern B implements 接口一, 二...
|
继承是不允许多重继承的但是调用接口的时候可以调用多个,算是一种多种继承。