一.封装
1.概述
将类的某些信息隐藏在类的内部,不允许外部程序直接访问。只能通过该类提供的特定方法来实现对隐藏信息的操作和访问
要隐藏对象信息,同时留出访问的接口
2.特点
安全方便修改,独立易于维护,方便加入控制逻辑,限制使用者的不合理操作
3.实现方式
变量使用private,使用getter,setter方法与外部交互
类和方法的编写本身就是封装,提高了功能性
public class Cat{
private String name;
public Cat(){
}
public void setName(String name){
this.name=name;}
public String getName(){
return"我是一只叫"+this.name+"的猫咪"}
public int getMonth(){
return month;}
public void setMonth(int month){
if(month<=0){
System.out.println("输入信息错误")}
else
this.month=month;
}
}
二.继承
1.概述
使用已经存在的类创建新类
新类的定义可以增加新的数据或功能,也可以使用父类功能,但必须继承父类全部开放的特征
使用extends关键字
2.逻辑关系
符合A is a B
3.继承的特点
子类自动拥有父类所有非private的属性和方法
通过子类对象既可以调用自身非private修饰的成员,也可以调用父类非private修饰的成员
父类不可以访问子类的特有成员,即使是共有的
继承提高了代码的可复用性,加快开发效率
继承的出现让类与类之间产生了关系,提供了多态的前提
4.注意事项
Java中类只支持单继承,不允许多继承,一个类只能有一个直接父类
多个类可以继承一个父类
class b extends a{}
class c extends a{}
java 中允许多层继承,一个类的父类可以再去继承另外的父类
class a{}
class b extends a()
class c extends b()
在Java中,子类和父类时一种相对概念,一个类是父类的同时也可以是子类
5.继承后子类父类成员变量的特点
子类的对象调用成员变量的时候,优先调用子类的变量,没有时用父类的替代
子父类中出现同名的成员变量时,在子类中需要访问父类中非私有的成员变量时,需要使用super关键字
6.继承后子类父类成员方法的特性
子类的对象调用方法时,优先使用子类的方法,父类的方法可以替补
子类的方法与父类相同时,子类覆盖父类的方法,称为override重写
7.继承的初始化顺序
父类中:静态代码块,构造代码块,无参构造方法,静态属性
子类中:静态属性,静态代码块,构造代码块,无参构造方法
顺序:1父类静态代码块 2子类静态代码块 3父类构造代码块 4父类无参构造方法
5子类构造代码块 6子类无参构造方法
8.方法重载和方法覆盖
方法重载:同一个类中,方法名相同,参数列表相同(参数个数,类型,顺序至少有一项不同)
方法覆盖:子类和父类的方法必须同名,方法形参列表必须相同,子类方法修饰符权限大于父类
返回值类型是基本数据类型时必须相同,是引用数据类型时相同或也是父子类关系
重写后,子类对象调用的和父类重名的方法和属性都是子类的
被final修饰的方法不允许在子类中覆盖
父类被覆盖的方法的参数列表中被声明为 final
的参数,在子类的覆盖方法的中可以不必指定为 final
子类覆盖方法声明的 异常列表中的异常类 必须与父类被覆盖方法声明的异常列表中的异常类 兼容
只有在 子类类体中可以访问 的父类或祖先类的方法才能被覆盖
如果通过子类对象访问父类方法,在 父类类体 中,访问到的任然是子类中的覆盖方法
静态方法不能被覆盖,只能被隐藏