封装(生成getter和setter)
封装的必要性
- 在对象的外部,为对象的属性赋值,可能存在非法数据的录入
-
什么是封装
在编程中,要求代码高内聚,当A对象被被B对象调用的时候,B对象就不需要了解A对象的细节
-
类的封装
主要是针对类的属性、构造方法、一般方法
- 封装的过程
- 利用修饰符来调整属性、方法的可见性
- 对于需要开发的属性或者是方法,可以再次通过封装其他的开发方法进行暴露
公共访问方法:属性两个重要的封装方法、、作用:保证数据的正常录入
取值getter:通过对属性的封装,获取属性的具体值
- 返回的类型是被封装属性的类型
- 必须使用小写get开头
- 属性名称在get之后,且第一个字母大写
private int money;
public int getMoney(){//返回的类型一致,属性名称在get之后,且第一个字母大写
return money;//具有返回值
}
赋值setter:通过对属性的封装,获取属性的具体值
- 输入的参数类型要和封装变量的类型一致,没有返回值
- 必须使用小写get开头
- 属性名称在set之后,且第一个字母大写
- 在方法内部进行修改
private int money;
public void setMoney(int money){
this.money=money;
}
过滤有效数据
- 概念方法:在公共访问区,添加逻辑判断,对数据进行判断处理,进而过滤掉非法数据,确保数据的安全性
private int money;
public void setMoney(int money){
if(money>5000){
this.money=this.money-5000;
}else{
System.out.printIn("余额不足");
}
- 概念方法:在公共访问区,添加逻辑判断,对数据进行判断处理,进而过滤掉非法数据,确保数据的安全性
-
修饰符
public:共有的,其他类可以调用
private:私有的,其他类不可以调用,只有自己的方法才可以调用
protected:受到保护的
不写:默认的继承(extends)
概念
基本使用
创建一个父类,定义相关的属性和方法 ```java public class MyFather{//创建一个父类 private String name;//将姓名设置私有的修饰符 protected int money;//将金钱设置为受到保护的 } //方法 public MyFather(){ this.name=name; this.monry=10000; }
2. 创建一个子类,继承父类,使用extends关键字继承
```java
public class MyChlid extends MyFather{//extends继承父类的属性和方法
public int getMoney(){//设置getter封装方法进行取值
return this.money;
}
}
- 在使用的时候,直接通过子类创建对象,就可以获取父类的属性和方法 ```java public static void main(String[] args) { MyChild myChild = new MyChild(); System. out. println(myChild. getMoney()); }
4. 子类在继承父类的时候,会默认继承无参构造方法,一旦父类没有无参构造方法,就会报错,
怎么去改:在子类继承处ctrl+enter,这时候会自动在子类创建构造方法将(this.money=money;)修改为(super(money));意为利用super指向父类的构造方法,获取money属性
<a name="ICANx"></a>
### 方法的重写(override)
基本概念:属于一种多态,但是必须在继承的前提下才能使用
1. 子类在继承父类之后,将父类的方法重写
1. 可以使得不同的子类具备不同的特征
1. 在Java中,所有的类都有一个父类叫Object,常见的被重写的方法
1. toString();将对象属性转换成字符串,快捷键toString
1. equals();通过重写equals(Object obj),实现类判断相等功能
<a name="hAZ0H"></a>
### Super
<a name="c4yIe"></a>
### 概念
指向父类对象的引用,
<a name="VXIBJ"></a>
### 两个作用
1. 可以调用父类的方法和属性
1. 可以调用父类的构造方法
1. 每个类中都会带一个无参的构造方法,当无参的构造方法重载以后,默认的无参构造方法失效
1. 一个子类继承父类之后,在使用子类创建对象的时候,必须要调用父类的构造方法(默认情况下,是调用的父类的默认无参构造方法)
1. 旦父类构造方法被重载之后,默认的构造方法失效了,那么子类默认情况下就无法调用到父类默认无参的构造方法(简单解决:给父类再加一个无参的构造方法)
1. 解决方法:
1. 给父类再加一个无参的构造方法
1. 在子类中通过super调用父类有参的构造方法

<a name="nSaYI"></a>
## 多态
<a name="ujPhq"></a>
### 概念
1. 建立在继承的基础之上,父类引用指向子类对象,从而产生多次形态
1. 父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法
1. 如果子类重写了父类的方法,那么通过父类在调用方法的时候,不同的子类就会有不同的调用方式
<a name="ogL7d"></a>
### 拆箱与装箱
装箱:向上转型,使用父类指向子类对象叫做装箱
```java
Father f=new Hero;//Father是Hero的父类
拆箱:向下转型,将父类的引用强制转换成子类的类型
hero h1=(hero)f;//hero是f的子类
h1.skill();
类型转换异常
instance of关键字
向下转型前,应判断引用中的对象真实类型,保证类型转换的正确性。
语法:父类引用instance of类型//返回boolean类型结果