Java学习之路--static关键字
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
45
46
47
/**
* 测试static关键字
* @author 葛宇
*/
package 面向对象;

public class TestStatic {

int a;
int b;

static int x; //属于类而不属于对象
static int y; //属于类而不属于对象

void func1() {
//普通成员方法可以调用类的普通成员变量和static变量和static方法
System.out.println(a);
System.out.println(b);
System.out.println(x);
System.out.println(y);
System.out.println("普通成员方法func1");
func2();
}

static void func2() {
//属于类而不属于对象
//不可在static方法调用this.a或this.b或this.func1()
//static方法的生命周期与类相同,早于对象的诞生,而普通成员变量是属于对象的,所以static方法无法调用普通成员变量
System.out.println("static成员方法func2");
}

public static void main(String[] args) {

TestStatic obj = new TestStatic();
x = 1; //可以不通过对象直接调用static成员变量
System.out.println(x); //可以不通过对象直接调用static成员变量
System.out.println(TestStatic.x); //可以通过对象调用static成员变量

func2(); //可以不通过对象直接调用static成员方法
TestStatic.func2(); //可以通过对象调用static成员变量

TestStatic obj1 = new TestStatic();
TestStatic.x ++;
System.out.println(TestStatic.x);
//静态变量的改变相当于是对类模板的改变,会对其他对象产生影响,
}
}

Java学习之路--重写
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
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
* 测试重写
* @author 葛宇
*/
package 面向对象核心;

public class TestOverride {
public static void main(String[] args) {
Airplane obj = new Airplane();
obj.run();
}
}

class Transportation{

public void run() {
System.out.println("Running");
}

public Person whoIsPsg() {
return new Person();
}
}

class Airplane extends Transportation{

public void run() {
System.out.println("Flying");
//重写了父类的run()
}

public Student whoIsPsg() {
return new Student();
//重写了父类的whoIsPsg()
}

/*
* public Student whoIsPsg() {
* return new Student();
* //重写了父类的whoIsPsg()
* }
*/
/*
* public Object whoIsPsg() {
* return new Object();
* //重写了父类的whoIsPsg()但报错
* }
*/

}

/* 构成重写的条件:
* 子类继承父类
* 重写的方法名,形参列表要相同
* 返回值类型和声明异常的类型,子类应<=父类
* 方法访问权限:子类>=父类
*/

Java学习之路--继承
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* 测试继承
* @author 葛宇
*/
package 面向对象核心;

public class TestExtends {
public static void main(String[] args) {
Student stu = new Student();
Student stu_ = new Student("Max",170,"C++");
//stu拥有Person类所以属性和方法
stu.name = "Jack";
stu.height = 180;
stu.major = "JAVA";
stu.breath();

System.out.println(stu instanceof Student);
System.out.println(stu instanceof Person);
System.out.println(stu instanceof Object);
}
}

class Person{

int height;
String name;

public void breath() {
System.out.println("呼吸");
}
}

class Student extends Person{

//int height;
//String name;
String major;

public Student() {

}

public Student(String name,int height,String major) {
this.name = name;
this.height = height;
this.major = major;
}

public void study() {
System.out.println("学习");
}

/* public void breath() {
* System.out.println("呼吸");
* }
*/
}

/*
*父类也叫超类或基类
*没有多继承,只有单继承
*接口技术有多继承
*java中只有共有继承
*子类可以得到父类的全部属性和方法(构造方法除外),但不见得都可以使用
*如果没有使用extends继承则默认是继承了java.lang.Object
*/