1.封装性
属性封装
某一些属性,如果可以直接被其他类访问,这样的数据不安全。
解决办法:
- 先用private将属性封装起来
- 在类中设计两个方法,分别用来访问这个属性(setter、getter方法)
1.1private
是一个访问权限修饰符,被private修饰的成员只能在当前类中访问。
1.2setter、getter方法
可以把属性私有化后,通过setter、getter方法用于外界对属性的访问。并且可以对数据进行过滤,从而使属性在我们期望的范围内。
JavaBean设计规范
1.所有的类必须是public权限
2.所有的属性都需要私有化,并提供setter、getter方法
1.3单例设计模式
单例的定义:希望一个类在程序运行过程中,始终只有一个对象。
饿汉式单例:
- 先把构造方法私有化
- 设计一个私有的、静态的当前类对象,并初始化
- 设计一个方法,返回第二步实例化的对象
public class Instance{
private Instance(){}
private static Instance ins = new Instance();
public Instance getInstance(){
return Ins;
}
}
懒汉式单例
- 先把构造方法私有化
- 设计一个私有的、静态的当前类对象,不初始化
- 设计一个方法,返回第二步声明的对象,判断这个实例是不是null,如果是则创建,如果不是则return这个实例
public class Instance{
private Insetance(){}
private static Instance ins = null;
public Instance getInstance(){
if(ins == null){
ins = new Instance();
}
return ins;
}
}
2.继承
2.1继承的基本概念和语法
如果有多个相关的类有相同的属性和行为,那么我们可以将这些相同的部分提取出来,单独做成一个类。
这个被提取出来的类就是:父类、基类、超类
具有相同属性和行为的类:子类、派生类
语法用extends关键字来描述
//Person 是Animal的子类
//Animal是Person的父类
class Person extends Animal{}
2.2继承的特点
- 子类可以访问父类中看得到的成员(没有被private修饰的)
- java是一个单继承的语言,一个类只能有一个父类,但是一个类可以有多个子类
- 子类在继承父类的成员的同时,还可以有自己特有的属性和方法(对父类的功能进行扩展)
2.3继承中的构造方法
一个对象在实例化的时候,会先实例化从父类继承的属性,然后再实例化自己特有的属性。在实例化父类部分的时候,默认调用父类无参的构造方法。
- 如果父类没有无参构造,子类的对象无法实例化
- 给父类添加一个无参构造
- 在子类的构造方法中显式地调用父类有参构造方法
- 关键字super
- 类似于this
- super是对父类对象的引用
2.4访问权限修饰符
访问权限:描述一个类、属性、方法可以被访问到的范围
访问权限包含四种:公共权限,保护权限、包权限、私有权限
- 公共权限:public在当前项目任意位置均可访问
- 保护权限:protected在当前包的任意位置、跨包的子类中可以访问
- 包权限:package、default在当前包中可以访问,一般这个权限不写出
- 私有权限:private只有本类可以访问
2.5方法的重写(Override)
子类对父类的方法进行重新实现,又称为覆写
重写过程中需要注意:
- 方法名必须和父类方法名一致,子类只能重写父类中存在的方法。
- 参数必须和父类中方法参数一致
- 访问权限不能比父类更加严格
- 返回值要和父类方法返回值类型一致,或者是其子类型
@Override是一个注解,放在方法上方,可以对这个方法进行校验,判断是不是重写的方法。
2.6final关键字
final表示最终的,可以用来修饰属性,类,方法
- 修饰属性:这个变量的值不可改变,是一个常量
- 修饰方法:这个方法不可被重写
- 修饰类:这个类不可以被继承
2.7Object类
Object类是java的根类,任何类都是直接或间接的继承自Object。其定义了很多方法,供其子类使用。
- toString()
- 返回一个对象的字符串形式,当需要将一个对象以字符串输出的时候,就会调用这个方法
- 可以重写这个方法,设置指定类的对象的字符串表现形式
- hashCode()
- 默认返回一个对象地址的HashCode
- 如果无关哈希表结构,这个方法基本没用
- 涉及哈希表结构,这个方法很重要
- HashSet、HashMap
- equals()
- 可以通过自定义规则来比较两个对象
- 在定制规则的时候需要注意以下几点:
- 如果obj是null结果一定是false
- 如果this==obj结果一定是true
- 如果this和obj类型不同,结果一定为false
- getClass()
获取一个对象的类型
3.多态
3.1对象的转型
向上转型
- 由子类类型转为父类类型
- 是一个隐式转换,肯定可以转换成功
- 向上转型后的对象,将只能访问父类共有的成员
向下转型
- 由父类类型转为子类类型
- 是一个显式转换,不一定转换成功
- 向下转型后的对象,将可以访问子类特有的成员
3.2instanceof关键字
如果向下转型失败,程序会抛出ClassCastException;可以加上类型判断,判断是否为子类类型
语法:
对象 instanceof 类
以上为判断一个对象是不是指定的类型,返回值是一个boolean
3.3多态在父类和子类中的体现
- 父类的引用可以指向子类的对象
- 向上转型后的对象,在调用父类方法的时候,其实最终实现是子类的重写实现
- 多态:由向上转型后的对象调用相同的方法,最终实现不一样
3.4多态在一个类中的体现
用一个类的对象,调用类中同名的方法,结果也不一样,就是重载