Skip to content

Commit 1dd6aca

Browse files
committed
更新 oop-1
1 parent 3ee53cb commit 1dd6aca

2 files changed

Lines changed: 109 additions & 4 deletions

File tree

src/md/java/se/2022-07-09-oop-1.md

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,26 +106,38 @@ public class Hero{
106106

107107
### 继承
108108

109-
定义父类之后,子类可以从基础类进行继承,这样一来,子类就可以获得父类中非 `private` 的属性和方法,从而提高了代码的复用率
109+
定义父类之后,子类可以从基础类进行继承,这样一来,子类就可以获得父类中非 `private` 的属性和方法,从而提高了代码的复用性
110110

111111
继承实现了 `IS-A` 关系,假设我们现在有一个类 `Shooter` 继承自 `Hero`,那么此时我们就可以定义一个父类引用,然后将该引用指向它的子类对象。
112112

113+
`Java` 中提供了一个关键字 `extends`,从而让一个类和另一个类建立起继承关系,其格式如下:
114+
115+
```java
116+
public class 子类 extends 父类{}
117+
```
118+
113119
```java
114120
public Shooter extends Hero{
115121
……
116122
}
117123
```
118124

125+
其中,被继承的类叫做父类(也叫超类或基类),如上述代码中的 `Hero`,另外一个类则叫做子类(也叫派生类),比如上面的 `Shooter`
126+
119127
```java
120-
Hero shotter = new Shooter();
128+
Hero shooter = new Shooter();
121129
```
122130

123-
124-
125131
但是要注意一点:**在 Java 中,类只能单继承**
126132

127133
### 多态
128134

135+
所谓多态,就是同类型的对象,表现出的不同形态,表现形式为:
136+
137+
```java
138+
父类类型 对象名 = 子类对象;
139+
```
140+
129141
指的是父类或者接口定义的引用变量可以指向子类或具体实现类的实例对象,提高程序的扩展性。
130142

131143
多态又可以分为编译时多态和运行时多态,其中,编译时多态是指方法的重载,而运行时多态则指的是程序中定义的对象引用所指向的具体类型在运行期间才能确定下来。
@@ -138,6 +150,11 @@ Hero shotter = new Shooter();
138150

139151
如果同时满足以上三个条件,那么此时多态是运行时多态。
140152

153+
多态中,调用成员变量和成员方法时,遵循以下原则。
154+
155+
1. **调用成员变量:编译看左边,运行也看左边**:指 `javac` 编译时,会看左边的父类中是否有该变量,如果有则编译成功,如果没有就会编译失败。而用 `java` 运行代码时,实际获取的成员变量是父类中的值。
156+
2. **调用成员方法:编译看左边,运行看右边**:指 `javac` 编译时,会看左边的父类中是否有该方法,如果有则编译成功,如果没有就会编译失败。而用 `java` 运行代码时,实际调用的是子类中的方法。
157+
141158
## 总结
142159

143160
以上就是关于面向对象编程思想的一些简单知识介绍了,主要讲了面向对象的概念,面向对象的 3 大特性以及面向对象的 5 大原则。如果觉得本文对你有所帮助,那就来个一键三连再走吧!
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
title: 面向对象进阶(一)
3+
isOriginal: true
4+
category:
5+
- Java 菜鸟入门
6+
date: 2022-12-03
7+
order: 51
8+
---
9+
10+
## static
11+
12+
静态的意思,是 `Java` 中常用的修饰符,既可以用它来修饰成员变量,也可以用它来修饰成员方法。
13+
14+
### 静态变量
15+
16+
静态变量就是用 `static` 来修饰的成员变量,最重要的特点就是一个类中的静态变量被类中的所有对象所共享。它不属于任何一个对象,而是属于类。其生命周期同类一样,共生共存,是优先于对象的。
17+
18+
和成员变量不同的是,成员变量只能通过新建对象,然后用对象名来进行调用。而静态变量不仅仅可以用这种方式,还可以直接通过类名来进行调用,而这也是更为推荐的方式。
19+
20+
```java
21+
public class Hero{
22+
/** 成员变量 */
23+
private String name;
24+
25+
/** 静态变量 */
26+
pubic static String game;
27+
28+
// 各种 setter 和 getter
29+
}
30+
```
31+
32+
1. **成员变量调用**
33+
34+
```java
35+
public class Main{
36+
public static void main(String[] args){
37+
Hero hero = new Hero();
38+
hero.setName("赵怀真");
39+
}
40+
}
41+
```
42+
43+
2. **静态变量调用**
44+
45+
```java
46+
public class Main{
47+
public static void main(String[] args){
48+
// 第一种方式
49+
Hero hero = new Hero();
50+
hero.setGame("王者荣耀");
51+
52+
// 第二种方式,更为推荐
53+
Hero.setGame("王者荣耀");
54+
}
55+
}
56+
```
57+
58+
### 静态方法
59+
60+
静态方法就是类中用 `static` 来修饰的成员方法,一般用来修饰公共的工具类或者测试类。
61+
62+
同样的,静态方法既可以用通过新建对象,然后用对象名来调用的方式,也可以直接通过类名来调用的方式,这也是更为推荐的方式。
63+
64+
```java
65+
public class Util{
66+
private Util(){};
67+
68+
pubilc static void attack(){
69+
System.out.println("攻击");
70+
}
71+
}
72+
```
73+
74+
```java
75+
public class Main{
76+
public static void main(String[] args){
77+
Util.attack();
78+
}
79+
}
80+
```
81+
82+
### 注意
83+
84+
使用 `static` 修饰方法或变量后,需要注意以下的小细节。
85+
86+
- 一个静态方法中**只能**访问静态变量和其他的静态方法。而不能访问非静态的变量和方法。
87+
- 但一个非静态方法一方面既可以访问静态变量,也可以访问非静态变量;另一方面,也既可以访问静态方法,也可以访问非静态方法。
88+
- 不同于成员方法,静态方式中是不存在 `this` 关键字的。

0 commit comments

Comments
 (0)