封装:
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。
封装的两个大致原则
把尽可能多的东西藏起来,对外提供便捷的接口;
把所有的属性藏起来。
封装的优点
便于使用者正确使用系统,防止错误修改属性
有助于系统之间的松耦合,提高系统独立性
提高软件的可重用性
降低了构建大型系统的风险
封装的步骤:
修改属性的可见性(设为private)
创建公有的getter/setter方法(用于属性的读写)
在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
封装时会用到多个权限修饰符来修饰成员变量和方法
作用域 修饰符 | 同一个类中 | 同一个包中 | 子类中 | 任何地方 |
private | 可以 | 不可以 | 不可以 | 不可以 |
默认修饰符 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
IDEA添加geter/setter方法的快捷键:Shift+Alt+S+R
继承:
语法:
1、编写父类(或叫基类、超类)
class Pet{
//公共的属性和方法
}
2、编写子类、继承父类
class Dog extend Pet{
//子类特有的属性和方法
}
在Java中只支持单继承,每个类只能有一个直接父类。但子类可以继承父类的父类的方法和属性。
子类可以从父类中继承到:
1、继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包中。
2、继承默认权限修饰符的属性和方法,大拿hi子类和父类必须在一个包中。
不能被继承的父类成员:
private成员、子类与父类不在同包使用默认访问权限的成员、构造方法。
子类访问父类成员:
访问父类构造方法:
super();
super . name;
访问父类的属性:
super . name;
访问父类的方法:
super . print;
super代表对当前对象的直接父类对象的默认引用 。
super必须出现在子类(子类的构造方法)中,且必须是第一句。
不可以访问父类中定义为private的属性和方法。
多重继承关系的初始化顺序:父类属性>>父类构造方法>>子类属性>>子类构造方法
如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
如果子类的构造方法中通过super显式调用父类的有参构造,则将执行父类相应的构造方法,而不执行父类的无参构造方法。
如果子类的构造方法中通过this显式调用自身的其他构造方法,则在相应构造方法中应用以上两条规则。
方法重写(overriding)
在子类中根据需求对从父类继承的方法进行重写,成为方法的重写或方法的覆盖
方法重写的规则:
重写方法与被重写方法必须具有相同的方法名和参数列表。
重写方法的返回值必须和被重写方法的返回值相同或者是其子类。
重写方法不能缩小被重写方法的访问权限。
方法重写和方法重载的区别和联系:
overloading是方法重载,重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型、访问修饰符无关。
overriding是方法重写,重写涉及的是子类和父类的同名方法,要求方法名相同,参数列表不同,返回值类型相同(或是其子类)、访问修饰符不能严于父类。
位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 | |
方法重写 | 子类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |
Object类
Object类是所有类的父类。
在定义一个类时,没有使用extend关键词,也就是没有明显显示继承某个类,那么这个类就是直接继承Object类。所有对象都继承Object类的方法。
Object类中定义了大量的可被继承的方法,也是它的子类经常重写的方法。
方法 | 说明 |
toString() | 返回当前对象本身的有关信息,按字符串对象返回 |
equals() | 比较两个对象是否是同一个对象,是则返回true |
hashCode() | 返回该对象的哈希代码值 |
getClass() | 获取当前对象所属的类信息,返回Class对象 |
final修饰符
在Java中,final修饰词用来修饰类、方法和变量(包括成员变量和局部变量)。
当用final修饰一个类时,表示这个类不能被继承。也就是,如果一个类你永远不想让他被继承,就可以用final来修饰。final类中的成员变量可以根据需要设为final,但是 要注意final类中的成员方法都会被隐式指定为final方法。
使用final修饰的方法表示此方法已经是“最后的最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。
final成员变量表示常量,只能被赋值一次,赋值后值不可以改变。
final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
多态
多态是面向对象的三大特征之一
使用父类作为方法的形参,是Java中实现和使用多态的主要方式之一。
使用父类作为方法的返回值,是Java中实现多态的另一种方式。
具有继承关系,父类(或父类的父类)引用指向子类对象,子类重写方法,