面向对象特征之封装
什么是面向对象的封装?
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是一个修饰符,可以修饰类型、修饰属性、修饰方法、局部变量、参数