典型特征:封装 继承 多态
封装:在JAVA中封装是随处可见的
class Human{
String sex;
int age;
}`
比如一个类就封装了属于这个类属性和方法
public int sum(int a, int b)
{return a+b;}
有的方法就封装了一些特定的功能。
sum这个方法就是封装了一个求和的功能
除了封装特定功能和数据之外,JAVA还提供了封装之后的访问权限从大到小依次是:
public – protected – default – private
public(类 包 子类 任意) protected(类 包 子类) defaule(类 包) private(类)
封装的意义:
(1)提供访问权限是为了保证数据的安全,避免他人随意修改数据;
(2)封装好的代码,可以重复利用,提高代码的复用性。
继承: extends,java中的类是单一继承,接口是多继承。
继承是指子类可以直接复用父类的代码,减少代码的冗余。
**多态:**分为对象多态和行为多态
对象多态:说人话就是一个对象可以以多种形态出现。
(1)对象的多态,举例如下:
class GrandPa{ }
class Father extends GrandPa{}
class Son extends Father{}
new Son(); -- new了一个对象,看她可以以那些形态出现
Son s = new Son(); -- 可以以自己本类的形
Father f = new Son(); -- 可以以向上造型的方式出现
也就是父类引用指向子类对象
GrandPa g = new Son();--还可以继续以父类的父类的形态出现
在JAVA中对象多态有什么好处:
public void test1( Father f ){ }
public void test2(Son s ){ }
public void test3(GrandPa g){ }
例如,以上代码,声明了三个方法,分别要求传入的参数类型都不一样,但是由于oop对多态的支持,为了简化代码,其实可以只声明test3()这个方法。在传入参数时,只要是GrandPa这一脉相承的类的对象,都可以灵活使用该方法。
public void test3(GrandPa g){ }
text3(new son());
text3(new Father());
text3(new GrandPa());
行为多态:就是指方法的重载和重写。
指一个方法可以以多种形态出现。
静态方法不支持重写
1)重载:发生在同一个类中,方法名一样,参数列表不同(参数的个数,类型,顺序),返回值可以相同也可以不同。发生在编译期。
public void test( ){ }
public void test(int a ){ } // 是重载
public void test(int b ){ } //不是重载,类型一样
public void test(int b ,int c){ } //算重载,参数个数不一样
public void test(int b ,String c){ } //算重载,类型不一样
public void test(String c,int b ){ }//算重载 ,顺序不一样
如上代码所展示的,一个test方法,可以以6种形态出现,这就是行为的多态。
2)重写:方法名一样,参数一样,遵循两同两小一大的原则。发生在父子类中,发生在运行时。
两同:方法名一样,参数一样
两小: - 1.子类方法抛出的异常要比父类的小,或者一样;- 2.返回值如果是基本数据类型,子类的要和父类的一样。返回值如果是引用类型,子类要比父类的小,或者一样。
一大: 访问权限子类要比父类的大,或者一样。
Father f = new Son();-- 可以以向上造型的方式出现
也就是父类引用指向子类对象
向上造型后,f能点出什么,要看等号前的类型;
但是方法重写后,运行子类的方法还是父类的方法,要看等号后对象的类型。
编译看左边,(对方法进行了重写)运行看右边
多态中不关心具体的子类的类型,会把子类当作父类来看,写出通用代码