`

java中的封装、继承、多态

    博客分类:
  • java
 
阅读更多

封装

java中的第一特性就是封装,以世界中的实体体现到计算机的世界,每个对象都有自己的属性和行为。java中用类来将属性和行为封装到一起,将这个类的实例创建出来以后,这个实例就有这样的属性和行为,并对实例的使用者隐藏数据的实现过程。

1、封装的基本原则

     1)将实例变量标记为私有的(private),表示只能在类的内部使用。

     2)提供公有(public)的get和set方法,用来控制对实例变量的存取动作。

其中,实例变量在初始化的时候(不赋值的情况下)默认是有初始值的,而局部变量(方法内部的变量)是没有初始值的,在没有赋值的情况下使用局部变量则会报错。

2、在对象调用类中的方法时,可能会传参数,这里根据参数的类型分为按值传参和按引用传参两种方式。

    基本数据类型作为参数时,按照值传递的方式。也就是说定义一个基本数据类型的变量并赋值,然后该变量作为参数传递,如果在方法中对该变量值做修改,则该变量在本身定义处的值不会改变。

    引用数据类型作为参数时,如果在方法内部对变量的属性值做了修改,那么该变量的属性值就会随着修改。

 

 继承

java中第二特性就是继承。

1、继承的目的:实现代码的复用、定义出某些类共同的模板。

2、继承的概念:被继承的类叫做父类(基类或者超类),实现继承的类叫做子类。子类拥有父类的所有公有的实例变量和方法,通过关键字extends实现,且类的继承只能是单继承,一个子类只能有一个父类,但是子类可以拥有父类的特性(公有的实例变量和方法),也可以拥有父类的父类的特性(公有的实例变量和方法),这叫做继承的传递性。

3、继承产生的关系:同时子类还可以有自己的实例变量和方法,子类可以重写父类的方法,子类在调用的时候,会先监测自己是否有这个方法,如果有则调用自己的;若自己没有这个方法而直接父类有,则会调用直接父类的;如果直接父类也没有,则会调用间接父类的。如果子类重写了父类的方法,但是子类在调用的时候想要调用直接父类的方法则使用super.方法名()来实现调用直接父类的方法,如果子类想要调用间接父类的方法,则要通过直接父类的super.方法名()来调用。所有的类都继承自Object,如果类定义时没有继承任何类,那么这个类的直接父类就是Object,如果类继承了我们定义的其他类,那么这个类是间接的继承了Object类,所有的类都拥有Object类的方法,如果Object类的方法不满足需求时可以在子类中进行重写,我们经常重写的方法有toString()、equals()方法。

4、重写:子类声明一个和父类相同的方法,包括访问修饰符、返回值、方法名、参数类型、参数个数。

5、继承中的构造方法:在创建子类的对象时,java会默认的通过super();来调用父类的构造方法,创建父类对象,也就是必须按照继承关系由高到低(父→子)进行调用,这部分工作java已经悄悄地替我们做了,然而如果父类的构造方法被重载并且没有定义无参的构造方法,那么子类中的参构造方法(不论是否是有参构造还是无参构造)是不会被编译器通过的,此时要在子类的构造方法中重新调用父类的新的构造方法才可以,并且子类的每个构造方法中只能调用一次父类的构造方法。

 

多态

1、多态存在的条件:

      有继承关系;实现类中方法的重写;父类引用子类对象;

      由以上得知,封装和继承是实现多态的前提条件。

2、多态的定义:同一个方法可以根据发送对象的不同而有不同的行为表现。通过动态绑定实现,在执行的时候判断对象的实际类型,来确定调用相应不同的方法。

3、多态作用:

      3.1 降低类之间的耦合程度:通过方法返回父类或者参数传递父类,即父类指向子类对象的形式减少子类对象在方法中的比例程度,降低耦合。

      3.2 提高可替换性:还是通过父类指向子类来体现。

      3.3 提升可扩展性:在父类的基础上增加子类的个数不受限制,增加的子类不会影响现有的多态结构。

      3.4 通过接口提升通用性:父类通过方法签名,给子类提供接口,子类在父类基础上进行方法重写来达到自己的特殊需求。

      3.5 灵活性:子类的增加、以及接口的提供都提升了程序的灵活性。

多态规则:

在多态的情况下,引用数据类型可以是实际对象类型的父类;

当父类指向子类时,只能调用父类中具有的方法,不能调用子类中特有的方法,但是可以调用子类重写过父类的方法;

当方法的返回类型为父类时,说明方法可以返回父类及其父类下面所有子类对象;

当方法的参数为父类时,说明可以传入父类及其父类下面所有子类对象。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics