面向对象三大特征
封装(Encapsulation)
什么是封装
将某些东西进行隐藏,然后提供相应的方法获取
封装的设计思想
通俗来讲,就是把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装的设计思想。
像这样我们对一个类中的属性添加private
修饰符,将属性设置为私有的,外界在对这个属性访问就受到了限制,对于一些重要的信息我们就要用到封装
,这样外部就不能随便的修改了。
我们对属性设置了封装,那么怎么来对属性进行操作呢???
在实际开发中,方法一般会写set
,get
方法,来设置和获取封装了的属性。
这样,我们就可以通过set
,get
方法来对封装的对象属性进行操作。
对封装的属性,是不能直接输出的,这样,我们就是对数据进行了一种保护,这就是面向对象封装的特点。
继承(Interitance)
什么是继承
Java继承是面向对象的最显著的特征,多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
像上图中的人类(Person)
就是父类,又叫做超类或者基类,下面的学生类(Students)
、教师类(Teacher)
是子类,又叫做派生类。
继承有什么好处
- 提高代码的复用性,父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了。
- 让类与类之间产生了关系,是多态的前提。
继承的特点
Java中只支持单继承和多重继承,不支持多继承。
权限修饰符
类修饰符:两种:默认(default),public
属性、方法修饰符:四种:private,默认(default),protected,public
一般属性:用private修饰 ,方法:用public修饰
方法的重写
发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行重写。
重写有严格的格式要求:
子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要一致。
重写和重载的区别
重载:在同一个类中,当方法名相同,形参列表不同的时候 多个方法构成了重载
重写:在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写。
super关键字
super
:指的是父类的
super
:可以修饰属性,可以修饰方法
-
在子类中,可以通过
super.属性
和super.方法
的方式,显示的去调用父类提供的属性和方法 -
在特殊情况下,当子类和父类的属性重名时,你要想使用父类的属性,必须加上修饰符super.,只能通过super.属性来调用
-
在特殊情况下,当子类和父类的方法重名时,你要想使用父类的方法,必须加上修饰符super.,只能通过super.方法来调用
super:可以修饰构造器
super() -->作用:调用父类的空构造器,只是我们一般都省略不写(所有构造器的第一行默认情况下都有super(),但是一旦你的构造器中显示的使用super调用了父类构造器,那么这个super()就不会给你默认分配了。如果构造器中没有显示的调用父类构造器的话,那么第一行都有super(),可以省略不写)
在构造器中,super调用父类构造器和this调用子类构造器只能存在一个,两者不能共存
final关键字
修饰变量:final修饰的成员变量是一个常量,变量的值不可以被改变,final修饰成员变量,必须初始化,书写规范:所有字母都大写
修饰方法:final修饰方法,那么这个方法不能被该类重写
修饰类:final修饰类,该类不可以被继承,一旦一个类被final修饰,那么里面的方法也没有必要用final修饰了(final可以省略不写)
Object类
所有类都直接或间接的继承自Object类,Object类是所有Java类的根基类。也就意味着所有的Java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。
toString()方法
Object类的toString()的作用
现在,使用toString()方法的时候,打印出来的东西“不好看”,可读性不好,我们想知道对象的具体属性内容,就需要对toString()进行重写
未重写toString()方法:
重写toString()方法:
重写后输出的内容:
equals()方法
equals作用:这个方法提供了对对象的内容是否相等的一个比较方式,对象的内容指的就是属性。
父类Object提供的equals就是在比较==
地址,没有实际的意义,我们一般不会直接使用父类提供的方法,而是和toString()方法一样,在子类中对这个方法进行重写。
IDEA快捷键:alt + Insert
多态(Polymorphism)
多态的定义
多态性是对象多种表现形式的体现。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态的优点
- 消除类型之间的耦合关系
- 可替换性
- 可扩展性
- 接口性
- 灵活性
- 简化性
多态存在的三个必要条件
继承
重写
父类引用指向子类对象