- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 有人说面向对象,这个对象是什么?万物皆对象。你品,你细品!
深究面向对象的三大特性
1. 封装:
所谓封装,尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。
通常情况, private的访问修饰符,修饰属性,达到本类可见的效果。
访问通道,get/set方法是外界访问私有属性的唯一通道,方法内部可对数据进行过滤。(可在set方法中添加过滤条件)
基本要求: 提供公共访问方法,以保证数据可以正常录入。
2. 继承:
所谓继承,是类与类之间特征和行为的一种赠与或获得。
共性的提取
语法:class 子类 extends 父类{}
应用:继承后,子类可是有父类属性和方法
注意:一个类只能继承一个父类,但可以多级继承,属性和方法可叠加
访问修饰符
最大范围:
public(所有)>protected(非同包子类)>default(同包)>private(本类)
不可继承
1.类中的构造方法 ,只负责创建本类对象,不可继承
2.private修饰符的属性和方法,仅本类可见
3.父子类不在同包中,default修饰1方法和属性不可继承
案列
创建一个动物类,属性有name,color,方法有eat()
public class Animal {
private String name ;
private String color;
public void eat() {
System.out.println("吃东西了");
}
}
创建一个猫咪类,属性有footCount,方法有eat(),play()
public class Cat extends Animal{
//定义变量爪子数量
private String footCount;
public void eat() {
System.out.println("吃猫粮");
}
public void play() {
System.out.println("玩水");
}
}
创建一个狗狗类,属性有爪子数量,方法有play()
public class Dog extends Animal{
super.eat()
//定义变量爪子数量
private String footCount;
public void play() {
System.out.println("玩球");
}
}
创建一个测试类
public calss test{
public static void main (String[] args){
Cat cat = new Cat();//创建猫咪类对象
cat.name = "猫咪"; //错误,语法对,但需要get/set方法访问私有属性
cat.footCoount = 4;//正确
cat.eat();//重写eat()方法---内容---吃猫粮
cat.play();//调用猫咪类中play
Dog dog = new Dog();
dog.eat();//狗狗类中使用super,可访问父类公用属性或方法
}
}
方法重写/覆盖:
覆盖原则:
1.返回值类型,方法名称,参数列表 ------必须相同
2.访问修饰符可与父类相同或比父类更宽
执行机制:子类覆盖方法后,优先执行子类覆盖后的方法版本
super关键字:
1.在子类中,可用"super."形式直接访问父类继承的属性和方法,
如果父子类有重名的属性和方法,而又需要获得父类属性或方法,需要用super来获取父类成员
2.在子类构造方法首行:使用super(),调用父类构造发那个方法
继承关系下子类对象创建:
子类对象创建---先创建父类对象,后创建子类对象
由父类共性,子类独享,完成完整的子类对象
流程:先构建子类对象------初始化属性----执行构造方法(默认无参构造,有参构造执行流程需要写明)
多态:
所谓多态,父类引用指向子类对象,从而产生多种形态。
1.两者必须有直接或间接继承关系
2.父类引用仅可调用父类的属性和方法,不可调用子类的属性和方法
3.父类引用调用方法时,如果被,优先执行覆盖后的
public calss test{
public static void main (String[] args){
Animal cat = new Cat();//父类引用创建子类对象
Animal dog = new dog();
cat.eat();//吃猫粮--子类覆盖
dog.eat();//吃东西了
}
}
多态两种应用场景:
-
场景一:使用父类作为方法形参,实现多态
-
场景二:使用父类作为方法返回值,实现多态