Java中的封装,继承(重载和覆盖)和多态的理解

一:封装

        1:封装就是吧抽象的数据和对数据的操作封装在一起。通常与修饰符一起使用。

             eg: public class demo{

                             student stu=new student("xiaohua",5) 

                                System.out.println("名字是"+stu.name);

                                  System.out.println("年龄是"+stu.getAge());

}

                      class student{

                          public string name;

                           private int age;

                          public student(string name,int age) {

                            this.name=name;

                             this.age=age;

}

                          public int getAge(){

                                 return this.age;}

}在demo类中并不能直接访问age ,我们可以定义公共的方法来获取这个对象。

二:为什么需要继承:

        继承可以解决代码复用的问题,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些

        变量和方法,通过继承后就可以不用定义这些方法和变量。

       子类不能继承父类的私有的方法,其他的都可以继承

       一个类只能继承一个父类

       所有的类都是Object类的子类。

        继承不仅可以使用父类的方法和变量。还可以重写父类的方法。

         重写的定义:子类和父类的某个方法名称,返回类型,参数都一样,我们称子类方法重写(覆盖)了父类的方法

         重写的原因:子类和父类的某些方法索要实现的内容不同。

        重写的一些规范:final和static方法和构造方法不能够被重写,子类的访问权限要比父类的高,异常不能比父类

                                     更加宽泛。

        方法重载来源:重载来源于构造函数。当我们需要多个构造函数时候就需要用到重载,重载也适应与一般的方法中

         重载的规则:既然重载一个方法,这个方法名称必须相同,方法的参数类型,参数个数和参数的顺序至少有一个不

                               同,方法的返回类型可以不同,方法的修饰访问符也可以不同,但返回类型和修饰访问符不能作为重载

                              标志。只有参数的类型个数和顺序可以。

                               被重载的方法可以声明新的异常和更广的异常。

三:多态

          多态的定义:通俗的来讲,一个引用在不同情况下的多种状态。

                               也即是通过指向父类的引用来调用在不同子类中的方法。

            多态的作用是消除类型之间的耦合关系。

            继承允许将对象视为他们自己本身的类型或其基类类型来处理,允许将多种类型(继承与同一个基类,都可以看作基类的对象)视为同一类型来处理。

           多态:方法的调用允许一种类型表现出与其他的类型之间的区别,只要它们是从同一个基类中导出。

          多态的简单定义:同一种方法(子类的方法),不同的对象的类型(继承父类的不同的子类对象),得到的不同的结果。

      例如:几何形状的一个类Shape s=new Circle();Circle 是Shape的子类

                                  s.draw();在这里调用的是Circle的draw方法。

           能够实现这种正确的调用方法,通过的后期绑定(动态绑定:运行时根据对象的类型进行绑定

        多态的三个条件:

        继承:在多态中必须有继承

        向上转型:在多态中,把子类的对象传递给父类,父类隐形的可以调用子类的重写方法(通过动态的绑定实现)

         重写:必须覆盖父类中的方法。

       多态中关于静态方法和私有方法(final)

          私有方法不能够被重写,也不能够被子类使用,顾这种方法不存在多态

          静态方法:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.

原因:

1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制就可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。

2). 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。

3). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。

5:当一个方法被继承而没有覆盖时,向上转型之后,也只会调用父类的方法。如果进行覆盖,会调用子类的方法。也就是子类的方法优先级高于父类。

 

猜你喜欢

转载自blog.csdn.net/fengwenguang130733/article/details/87873433