Java面向对象思想理解总结
前言
设计规则:一般的设计规则大概内容如下:
- 将所有派生类(子类)共有的属性和行为抽到超类中---------------抽共性。
- 所有派生类(子类)的行为一样,设计为普通方法,所有派生类的行为都不一样,设计为抽象方法。
- 将部分派生类(子类)共有的行为,抽到接口中,接口时对继承的单根性的拓展----------------实现多继承。
面向对象三大特性:封装、继承、多态
一、封装
1.是指一种将抽象性函数式接口的实现细节部分包装,隐藏起来的方法。
2.要访问该类的代码和数据,必须通过严格的接口控制(属性私有化 private,行为公开化 public)
注意:若属性 private 修饰,同包下其他类需要访问,则要 getters 和 setters 方法(有返回值无参与无返回值有参的方法)
二、继承
1.子类继承父类成员方法,如果在子类中出现同名称的成员方法,则为覆盖,即子类成员方法覆盖掉父类成员方法,要在子类访问父类成员方法用 super().
2.父类的构造器调用以及初始化过程一定在子类的前面
3.继承是从已有的类得到继承信息的创建新的类的过程,把父类的行为或者属性继承过来。
三、多态
不同类的对象对同一消息做出响应,即:同一消息可以根据不同对象做或者采用多种不同的行为方式。(发送消息就是函数调用)
1.实现多态的技术:动态绑定,指在执行期间判断所引用的实际类型,根据其实际的类型调用其相应的方法。
2.作用:消除类型之间的耦合关系。
3.多态存在的三个必要条件:继承,重写,父类引用指向子类对象(向上转型)。
4.当使用多态方式调用方法时,检查父类中是否有该方法,如果没有,则编译错误,如果有,再去调用子类的该同名方法。
注意:静态 static 方法属于特殊情况,静态方法只能继承,不能重写 override,如果子类中定义了同名同形式的静态方法,它对父类方法只是起到隐藏的作用。调用看用谁的引用,则调用谁的版本。
如下代码栗子:
public class A { int age1=1; String name1="我是父类"; void show1() { System.out.println("this is 父类"); } static void method1(){ System.out.println("我是父类静态方法"); } }
public class B extends A { int age2=2; String name2="我是子类"; String newBianliang = "我是新增成员变量"; void show1() { System.out.println("this is 子类,我重写了父类的show()方法"); } void showB_1() { System.out.println("子类新增的方法"); } static void method1(){ System.out.println("我是子类静态方法"); } }
public class App { public static void main(String[] agrs) { //上转型对象 A a = new B(); //父类引用指向子类 //能操作继承或隐藏的成员变量, System.out.println(a.age1); System.out.println(a.name1); a.show1();//能调用子类继承或重写的方法 a.method1(); // System.out.println(a.age2); // System.out.println(a.name2); // System.out.println(a.newBianliang); //编译错误,不能操作子类新增的成员变量 //a.showB_1();//编译错误,不能调用子类新增方法 /**
* 上转型对象特点总结:可以操作继承或隐藏成员变量,
* 调用子类继承或重写的方法.
* 不能操作子类的新增成员变量,不能调用子类新增的方法
*/ System.out.println("-----------------"); B b = new B(); System.out.println(b.age2); System.out.println(b.name2); a.method1(); } }
代码结果:
5.如果想要调用子类中有的方法,而父类没有的方法,需要进行强制类型转换,因为当父类的引用指向子类的对象(向上造型),用父类引用调用方法时,找不到父类中不存在的方法,这需要强制类型转换(向下转型)。
如下代码栗子:
//多态的演示 public class Duotai { public static void main(String[] args) { Aoo o = new Boo(); //向上造型 Boo o1 = (Boo)o; //o所指向的对象,就是Boo类型 o1.b(); Inter1 o2 = (Inter1)o; //o所指向的对象,实现了Inter1接口 o2.a(); //Coo o3 = (Coo)o; //ClassCastException类型转换异常 Aoo dd = new Coo(); Coo o4 = (Coo)dd; o4.a(); } } interface Inter1{ public void a(); } class Aoo{ } class Boo extends Aoo implements Inter1{ public void a() { System.out.println("实现Inter的方法"); } public void b() { System.out.println("引用所指向的对象,就是该类型"); } } class Coo extends Aoo { public void a() { System.out.println("123"); } } //输出结果显示如下: //所指向的对象,就是该类型 //实现Inter的方法 //123
输出结果:
四、抽象(特殊)
1.将相同的类的共同特征总结出来,构造成类的过程。
----1.1.包括数据抽象以及行为抽象。数据抽象变成类的成员变量,行为抽象变成类的成员函数。
----1.2.抽象只关心成员变量以及成员函数,并不关心具体的实现细节。
五、抽象类与接口的区别
1.抽象类可以提供成员方法的实现细节(抽象类可以没有抽象方法),而接口中只能存在 public abstract 方法。
2.抽象类的成员变量可以是各种类型,接口中成员变量只有 public static final。
3.抽象类可以有静态方法和静态块,接口中不能有(但 JDK 1.8 可以重写)。
4.一个类只能继承一个抽象类,而一个类可以实现多个接口。
总结
面向对象三大特征:
-
封装:
- 类:封装的是对象的属性和行为;
- 方法:封装一段特定的业务逻辑功能;
- 访问控制修饰符:封装的是具体的访问权限;
-
继承:
- 作用:代码复用;
-
超类:所有派生类所共有的属性和行为;
- 接口:部分派生类所共有的行为。
- 派生类:派生类所特有的属性和行为。
- 传递性,单一继承、多接口实现;
-
多态:
-
意义:
1.行为的多态:所有抽象方法都是多态的;
2.对象的多态:所有对象都是多态的; - 向上造型、强制类型转换、instanceof判断;
-
多态的表现形式:
- 重写:根据对象的不同来表现多态。
- 重载:根据参数的不同来表现多态。
-
意义:
Java面向对象介绍到这啦。
后续不断写写更多知识,让读者学起来不迷茫!
写作不易请点个赞3Q。若有错误之处,请各位点评下。
所有章节目录在此处:https://blog.csdn.net/qq_41254299/article/details/106638651
转载请注明出处:https://blog.csdn.net/qq_41254299
本文出自【Superclover_的博客】