一.封装
-
封装:对对象的访问权限加以控制,尽量隐藏对象内部的实现细节.(get/set是唯一的访问通道).
-
访问修饰符:private-私有的[本类之中]
-
语法:
//1.属性私有化 private 数据类型 属性名; //2.设置公开方法 //-设置值 public void set属性名(数据类型 属性名){ this.属性名=属性名; } //-获取值 public 数据类型 get属性名(){ return 属性名; }
二.继承
-
生活中的继承:施方的赠与,受方的获得
-
程序中的继承:是一种机制,体现类与类之间的"is a"/"is an"关系,只要类满足 子类 is a 父类,子类可以直接访问父类中的属性和方法
表现:把一组相同或者相似的类中的共性的属性和方法抽取出来(保留程序关注的部分),定义在父类中,实现代码的重用.
抽象父类的原则: 狗--动物--生物--物质--对象 功能越精细,和子类的重合点越多,越接近直接父类 功能越粗略,和子类的重合点越少,越接近于Object
-
语法
class 类名 extends 父类类名{} 满足继承关系,子类可以访问父类中的属性和方法--代码重用性 子类也可以访问自己特有的属性和方法--代码延展性 //java是单继承的,但是可以多级继承,属性和方法逐级叠加
不可被继承的
- 构造方法不能被继承
- 私有的属性和方法不能被继承,不能被子类直接访问
- 非同包子类default修饰的属性和方法不能被继承
-
访问修饰符(public private (default)默认的 protected)
本类之中 同包子类 同包非子类 非同包子类 非同包非子类 private √ × × × × default √ √ √ × × protected √ √ √ √ × public √ √ √ √ √ -
方法覆盖—方法重写
**概念:**当类中的方法无法满足子类的需求时,需要在子类中定义重名的方法进行方法覆盖.
**语法:**方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或者更宽
**注:**完成方法覆盖后,子类优先使用覆盖后的方法
面试重点:方法重载和方法重写的区别?/overload和override的区别?
方法重写:方法名相同,参数列表相同,返回值类型相同,访问修饰符相同或者更宽
方法重载:方法名相同,参数列表不同(参数个数,参数类型,参数类型的排列顺序),和返回值访问修饰符无关
-
super
**super:**当前对象的父类对象
- super.属性名/super.方法名(参数)
- super.属性名:当前对象的父类对象的属性,使用super区分本类属性和父类属性
- super.方法名(参数):当前对象的父类对象的方法.使用super区分父子类间覆盖前后的方法
- super(参数):调用本类的父类中的构造方法
- uper()必须放在构造器中的第一行有效语句,且不能和this()同时使用
- 如果一个子类的构造方法中不存在super(参数),系统默认添加super();
- super.属性名/super.方法名(参数)
-
对象的创建过程
- 开辟父子类空间,给所有属性默认值
- 创建父类对象(递归创建–1.初始化属性2.执行构造方法进行属性赋值)
- 给属性赋予初始值
- 使用构造方法进行赋值
三.多态
-
概念:
-
生活中的多态:客观事物在人脑中的主观反应,必须is a关系
-
程序中的多态:父类引用指向子类对象.
Animal a=new Dog(); //形成多态后,父类引用可以访问定义在父类中的属性和方法,不能访问定义在子类中特有的属性和方法 //父类引用调用的方法如果被子类覆盖,优先执行子类覆盖后的方法
- 编译时多态:父类引用可以指向多种子类对象
- 运行时多态:对同一个类型引用调用相同的方法,实现方式不同
-
-
多态的应用:
- 多态用在参数上:可以接收 本类型+所有子类型 的实参
- 多态用在返回值上:可以返回 本类型+所有的子类型 的数据
-
拆箱和装箱
-
装箱:父类引用指向子类对象(多态)–自动;向上转型
Animal a=new Cat();
-
拆箱:将父类引用转为子类类型–强转;向下转型
Cat c=(Cat)a;
**注:**父类引用转为子类引用后.可以访问子类中独有的属性和方法
在进行拆箱操作时,如果拆箱类型不是父类引用指向的真实类型,运行时时发生类型转换异常
(java.lang.ClassCastException:类 can not cast to 类)
Aniaml a=new Dog(); Cat c=(Cat)a;
-
-
instanceof:防止类型转换异常的发生
-
语法
引用名/对象名 instanceof 类型:可以判断对象名指向的对象是否是后面的类型 true:属于/是 false:不属于/不是
-