java中面向对象最基本的三个特征是:封装,继承,多态。
封装:
1.封装概述:
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。
2.封装原则:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法。
3.封装的好处:
(1)通过方法来控制成员变量的操作,提高了代码的安全性。
(2)把代码用方法进行封装,提高了代码的复用性。
(3)良好的封装能够减少耦合。
(4)可以对成员变量进行更精确的控制。
4.实现封装的步骤:
private关键字:
private是一个权限修饰符,可以修饰成员(成员变量和成员方法)。作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。
针对privae修饰的成员变量,如果需要被其他类使用,提供get和set方法进行操作。
this关键字:
this.属性:操作当前对象的属性。
this.方法 调用当前对象的方法。
this修饰的变量用于指代成员变量;方法的形参如果与成员变量同名,不带this修饰的变量值的是形参,而不是成员变量;方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量。
什么时候使用this?
解决局部变量隐藏成员变量的时候,简单来说就是两个变量重名的时候。
记住:方法被哪个对象调用,this就代表哪个对象。
继承:
1.继承概述:
继承是面向对象三大特征之一, 可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
2.实现继承的格式:
-
继承通过extends实现
-
格式:class 子类 extends 父类 { }
-
举例:class Dog extends Animal { }
-
3.继承带来的好处:
1.继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员;2. 还提高了代码的复用性(多个类相同的成员可以放到同一个类中);3.提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。
弊端:
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时,子类实现也不得不跟着变化,削弱了子类的独立性。
简单来说就是类与类的耦合性增强了,但是独立性却降低了。
4.什么时候使用继承?
比如A与B,A和B有关联的情况下可以考虑使用,或者当两个类有共同的作用和动作,否则不能滥用继承。
5.方法的重写
概述:
子类中出现了和父类中一模一样的方法声明
方法重写的应用:
当子类需要父类的功能,而功能子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。如子类如果对继承的父类的方法不满意或者不合适时,可以自己编写继承的方法。
重载和重写的区别:
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
注意事项:
1.私有方法不能被重写(父类私有成员子类是不能继承的)。
2.子类访问权限不能更低(public>默认>私有)。
this关键字:
当想访问本类的赋值变量时,可以使用this关键字,不会优先子类局部的范围。如this.age。
this访问本类构造方法:this()
this访问本类成员方法:this.成员方法()
super关键字:
当想访问本类父类的变量时,可以使用super,即使用父类的变量。如super.age
访问父类构造方法:super()
访问父类成员方法:super.成员方法()
final关键字:
final关键字是最终的意思,可以修饰成员方法,成员变量,类。
特点:
修饰方法:表明该方法是最终方法,不能被重写;修饰变量:表明该变量是常量,不能再次被赋值;修饰类:表明该类是最终类,不能被继承。
final修饰局部变量:
当变量是基本类型情况时,final修饰指的是基本类型的数据值不能发生改变。
当变量是引用类型情况时,final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。
static关键字:
static关键字是静态的意思,可以修饰成员方法,成员变量。
特点:
1.被类的所有对象共享,这也是判断是否使用静态关键字的条件。
2.可以通过类名调用,当然,也可以通过对象名调用,推荐使用类名调用。
访问特点:
总结:静态成员方法只能访问静态成员,非静态都可以访问。
继承中成员方法的访问特点:
多态:
1.概念:
同一个对象,在不同时刻表现出来的不同形态。简单来说多态就是对象的多种形态。
多态的前提:
-
要有继承或实现关系
-
要有方法的重写
-
要有父类引用指向子类对象
2.多态的成员访问特点
成员访问特点
-
成员变量
编译看父类,运行看父类
-
成员方法
编译看父类,运行看子类
为什么成员变量和成员方法的访问不一样?
因为成员方法有重写,而成员变量没有。
3.多态的好处:
提高了程序的扩展性,定义方法的时候,使用父类作为参数,将来在使用的时候,使用具体的子类型参与操作。
弊端:不能使用子类的特有功能。
4.多态中的转型
向上转型:
格式如:Animal a=new cat();a.eat()
向下转型:
格式如:Cat c=(Cat)a; c.eat(); c.playgame();--------playgame是子类特定的方法,使用向下转型就可以输出子类特定的方法。
5.多态的实现方式
方式一:重写
方式二:接口
方式三:抽象类和抽象方法
6.总结
多态可以简单理解成就是为了当在不同时刻时做出不同的反应,也为了方便程序的编写和简洁,在父类中就不再编写方法的具体实现;当有人继承后,再在子类中具体实现。