第五章、面向对象(中)

(封装、继承、多态)

1、封装:

(1)访问控制:体现封装,则需要掌握访问控制符

   •     public(接口访问权限)

   •     protected(包访问权限、继承访问权限)

   •   “默认”(包访问权限)

   •     private(无法直接访问)

在java中这些修饰符可以用于:

    修饰类 

    修饰类的属性成员(域)

    修饰类的成员方法

访问权限首先看类前的修饰符,当类的修饰符为public时,则类可以被所有的类所访问(可以import),当为默认时,则只能为包中的类所访问。在此前提下,再看方法前的修饰符。

类前修饰符为public时,当属性和方法前的修饰符为public时,则该属性可以被所有类访问;当属性和方法前为protected修饰时,对于类定义而言,可以被同包中的类和所有子类访问(子类和父类可以不在同一个包中),也就是B+C范围,但对于对象而言,只能被同一个包的类对象所访问,也就是B的范围;当为默认时,只能被同包中的类所访问(比protected访问权限小);当为private时,只能被本类内部所访问 。



2、继承

        ①通过extends关键字实现;

        ②子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。

子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;private的属性成员或是方法则不能被访问。

Object类: Object类是所有类的共同祖先,即使定义类时没有写extents Object。  在Object当中定义了许多方法,这些方法都可以被所有子类所继承。 



3、多态:

        ①多态的概念:多态是指一个程序中同名的不同方法共存的情况

        ②Java中提供两种多态的机制:重载(overloading)与覆盖(overriding)

(1)重载例子:   //参数不同

                          class Parent{

                                 public intgetScore(){

                                         return 3;

                                 }

                                 public intgetScore(int i){

                                         return i;

                                 }

                          }   

(2)覆盖:子类对父类的同名方法(方法名称相同,参数相同,返回 类型相同)重新进行定义,即在子类中定义与父类中已定义的相同名而内容不同的方法

方法名称相同,参数名称相同,返回类型相同:覆盖

方法名称相同,参数名称不同:重载

方法名称相同,参数名称相同,返回类型不同:编译不能通过

覆盖例1:

输出结果:4                  China

覆盖例2:

覆盖——注意:

①子类的访问修饰符权限应等于或大于父类

①同名的static方法和非static方法不能相互覆盖

③方法前有final修饰符,此方法不能在子类方法中进行覆盖

④在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的booleanequals(Object obj)方法

⑤抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容