封装和继承

81 阅读3分钟

面向对象特征之封装

什么是面向对象的封装?

1)隐藏实现的具体细节,对外只暴露接口(行为)

我们平常打开电视需要开机的行为,只需要用点击电源按钮电视就开机了,但是我们不需要到关心电视具体的开机行为

2)多个拥有相同属性和行为的对象可以封装成一个类

例如小明小红都拥有姓名年龄等属性,具有相同的学习行为,这样我们就可以将这些属性和行为封装成一个学生类

3) 属性私有化,

使用private关键字来修饰属性,外界不能够直接访问 属性在工作中通常定义为private,可以提供setter和getter方法来访问。

好处:1.对外隐藏 2.可以进行属性数据合法性的校验。

问题:我们定义方法的时候优先考虑使用private还是public进行修饰?

如果我定义的方法需要给外界使用将其设置为public,如果只是在类里面使用将其定义为private。所有定义方法优先考虑private。

注意:不能使用private关键字修饰class,只能使用public或者默认修饰,你定义的类时给别人使用的,如果将其私有化了,外界无法使用,这个类将毫无意义

4)构造方法私有化

封装核心

关键字:

public:表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

private:除了本类,任何地方都无法访问

如何访问private私有属性? setter方法(设置属性的值)和getter方法(获取属性的值),工作中通常先调用setter后调用getter

注意:Java中定义的每一个方法都只做一件事情(单一职责)

面向对象特征之继承

1)继承的概念

子类通过关键字extends继承父类(超类),父类(超类)在上,子类在下。子类可以使用父类的非私有属性和行为,从而达到代码的复用。

2)子类使用父类的行为

父类


/**
 * @Description TODO
 * @Author caojie
 * @Date 2020/7/21 14:10
 * @Version 1.0
 * Person是一个父类:有name属性,有吃饭的行为
 **/
public class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void eat(){
        System.out.println(name+"正在吃饭");
    }
}

子类


/**
 * @Description TODO
 * @Author caojie
 * @Date 2020/7/21 14:12
 * @Version 1.0
 * Student是一个子类,有age属性,有学习的行为
 * extends 扩展  , 子类扩展了父类的行为和属性
 * 通常先定义父类后定义子类
 *  一旦去掉extends  Person,编译就会报错,正是extends关键字的存在,子类才能使用父类的非私有行为
 **/
public class Student  extends  Person{
    private int stuAge;

    public int getStuAge() {
        return stuAge;
    }

    public void setStuAge(int stuAge) {
        this.stuAge = stuAge;
    }

    /**
     * study()方法是子类特有的方法
     * 此时先吃饭在学习
     *
     */
    public void study(){
        // 子类调用(使用)父类的共有行为(方法)
        eat();
        // 父类的name属性是私有的,不能直接访问,必须调用getName()方法进行访问
        // System.out.println(name+getName()+"正在学习。。 i am "+stuAge);
        System.out.println(getName()+"正在学习。。 i am "+stuAge);
    }
}

测试类


/**
 * @Description TODO
 * @Author caojie
 * @Date 2020/7/21 14:22
 * @Version 1.0
 **/
public class TestStudent {
    public static void main(String[] args) {
        Student liukai = new Student();
        liukai.setStuAge(19);
        liukai.setName("LiuKai");
        liukai.study();
    }
}

3)final 关键字

final 最终的 该关键字是一个形容词,也是一个修饰符。

生活中的例子:篮球比赛 final result 99 : 98 此时final表示最终的结果,不可改变的结果

Java中final是一个修饰符,可以修饰类型、修饰属性、修饰方法、局部变量、参数

1 使用final修饰类型