java oop详解

近日来重温了一下java oop的知识。加深了对面向对象的理解。尤为时继承方面。故写一篇博客。记录一下本身的想法和心得java

 

1.面向对象主要分为三大点(封装,继承,多态)编程

封装的思想促进了类的造成。相比于以前面向过程的编程。全部的方法和属性都堆积在一个main方法中,代码没法重复利用。重复率高。代码的可读性也很是的差。所以。封装呼之欲出。将共有的成员变量和行为封装成类。方便代码的复用和隐藏。oop

 

继承:将多个类的共有属性和方法封装成一个父类。而继承该父类的子类将拥有父类拥有的属性和方法。减小代码的重复率。对象

  (1.成员变量:(结论1)父类的成员变量会被子类继承,且子类对象中该成员变量和子类中的父类对象的该成员变量指向一个内存地址。也就是说,改变一个,另外一个也会被改变继承

   (结论2)子类还能够从新定义相同名字的成员变量,此时,父类中的成员变量将对于子类被隐藏。改变子类的成员变量时,就是改变子类新定义的成员变量。而子类对象中的父类对象的成员变量并无改变。此时想要在子类中调用父类的隐藏成员变量,只能经过super或者父类的引用来调用。接口

  下面是不一样修饰符修饰父类成员变量时继承的详解内存

    (1.1由(public、default、protected、private)修饰的成员变量。子类均可以继承。可是在子类中是否可以访问就取决于父类成员变量的修饰符了。且他们都知足上面论述的两段话。也就是说,当子类继承了父类的成员变量后,子类和父类的成员变量指向的是同个地址,当一个改变。。。。重复上面的话。当子类没法访问到父类的成员变量的时候,子类会去定义新的成员变量,父类的同名成员变量就被隐藏了。编译器

    (1.2由static修饰的成员变量。子类均可以继承。此时,继承过来的也是static变量。也就是说,父类和子类共享同一内存的静态变量。一个改变另外一个也跟着改变。(注意比价static变量和普通变量的区别,我加黑的两段话。一个针对于类,一个针对于对象)。同时,子类还能够定义新的同名成员变量(不管是否为静态),此时父类中的静态变量都会针对于子类被隐藏。博客

    (1.3由final修饰的成员变量,子类均可以继承.此时继承而来的是final类型的变量,子类没法去更改他。且知足结论一。且此时子类能够从新定义同名(不要求类型)的变量,此时父类中的成员变量也会相对于子类被隐藏。编译

 

  (2.方法:父类的方法是否能被子类继承。继承以后可否被重写,可否体现出多态。就要关注父类中该方法的修饰词。(排除一个,父类的构造方法没法被子类继承)

    (2.1 由public default protected private 定义的方法,子类都可以继承。只是,子类能不能访问到或者说调用到这个方法就要看父类方法前的控制符了。只要子类可以访问到该方法,子类就能重写该方法。此时,多态能够体现

    (2.2由static修饰的方法,子类均可以继承,且能够经过父类或者子类的类名以及对象去访问。可是,该方法没法被子类重写。若是子类想定义同名的方法,除非时static方法,要否则编译器会报错。显示不能重写。而子类定义同方法签名的static方法时,编译器会认为这是子类新定义的方法。父类中的方法将会针对于子类被隐藏。此时,父类引用指向子类对象的多态行为消失。改变成根据引用来调用方法。

  针对于static方法的没法重写性,咱们能够在抽象类中定义static非抽象方法,此时,代表子类的实现过程都一致,都是被父类提早编写好了,子类没法重写,断绝子类手滑重写不应重写的方法的可能性。

    (2.3由final修饰的方法,子类均可以继承,可是别说重写了,就连隐藏,都没法隐藏。所以,此时的子类只能老老实实的用父类的方法。要么,对其进行方法重载,说白了是定义一个不同的方法。多态行为消失

    (2.4由abstract修饰的方法,子类必须继承而后重写。多态行为体现

 

3.多态:多态总结起来就是一句话,父类的引用指向子类对象。此时调用的方法是子类重写过的方法。多态的具体体现有:继承(抽象类也是继承的一种体现),接口

相关文章
相关标签/搜索