面向对象三大特性

786 阅读3分钟
  • 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 有人说面向对象,这个对象是什么?万物皆对象。你品,你细品!

深究面向对象的三大特性

1. 封装:

所谓封装,尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。

通常情况, private的访问修饰符,修饰属性,达到本类可见的效果。

访问通道,get/set方法是外界访问私有属性的唯一通道,方法内部可对数据进行过滤。(可在set方法中添加过滤条件)

基本要求: 提供公共访问方法,以保证数据可以正常录入。

2. 继承:

所谓继承,是类与类之间特征和行为的一种赠与或获得。

共性的提取

语法:class 子类 extends 父类{}

应用:继承后,子类可是有父类属性和方法

注意:一个类只能继承一个父类,但可以多级继承,属性和方法可叠加

访问修饰符

最大范围:

public(所有)>protected(非同包子类)>default(同包)>private(本类) 图片1.png

不可继承

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();//吃东西了
        }
}

多态两种应用场景:

  1. 场景一:使用父类作为方法形参,实现多态

  2. 场景二:使用父类作为方法返回值,实现多态