# 面向对象
## 如何打开md文件
1、VSCode,预览窗口可以
2、IDEA
3、Typora
## 类和对象
类 一个模板,一类东西共有特征的抽象
属性
当变量写在类的语句块中时,可以认作是属性描述某种类型的信息
方法
类的行为,能做的事情
```java
<修饰符> <返回类型> <方法名>([参数列表]){ // 方法体 [return 语句] } public int calcAge(int currentAge){ return currentAge + 1; } public void printInfo(){ User user = getFromDatabase(1); System.out.println(user.getName()); } ```
## 封装
把类的某些特征隐藏起来,保证数据正确和安全
## 对象
对象是类的实际实现,是具体的实例
```java
Person p = new Person();
```
## 构造器 Constructor
构造对象用的代码块
默认构造器,如果一个类没有提供任何构造器,系统会分配一个。 如果一个类有其他带参的构造器,且还想用无参构造器(默认构造器),那么无参构造器必须要显式声明。
```java
public class Person{ // 默认构造器 public Person(){ } }
```
类和类的关系
### has-a
一个类成为另一个类的属性
### use-a
一个类作为另一个类方法参数
### is-a
继承
## 继承
单继承
父类中所有非私有成员都能被子类继承
访问范围
类本身 | 同包 | 有继承关系 | 所有类 | |
provate | Y | N | N | N |
不写 | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
### 方法覆盖
子类和父类可能有同样的行为特征,但行为的具体内容不一样,可以使用方法覆盖Override,也叫重写
1、方法名、参数列表、返回类型必须相同 2、子类覆盖父类方法的时候,子类方法的访问范围不能比父类访问范围小
## 多态 Polymorphism
多种状态
类型多态
```java
Employee emp = new Manager();
```
虚拟方法调用: 能调啥,看左边,做了啥,看右边
异类集合
### 方法重载 Overload
对象有一系列相同的行为,但处理的内容不同
1、方法名相同,参数列表必须不同(类型不同) 2、返回类型可以不同
#### 可变参数
```java
public void eat(String... foods) { System.out.print("准备吃:"); for (String food : foods) { System.out.print(food + "、"); } }
``` 一个方法只能有一个可变参数,且可变参数必须在参数列表最后 标签:java,##,构造,实训,0710,方法,public,### From: https://www.cnblogs.com/Chengjuice/p/18305910