和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 = scanner.nextInt();
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; // 等同于 public static final int VALUE = 10;
}

class MyClass implements MyInterface {
int VALUE = 20; // 这个并不是重写,而是定义了一个新的变量,隐藏了接口的 VALUE

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 接口一, 二...

继承是不允许多重继承的但是调用接口的时候可以调用多个,算是一种多种继承。