JAVA面向对象的三大特征
封装、继承、多态
1. 封装
-
定义:
就是将一些特定的代码进行归类到一个类中或者一个方法中,让其可以支持调用,比如我们写的方法其实就是一种简单的封装。让一个方法完成一个特定的功能,当需要此功能时,直接调用对应的方法即可。
-
示例:
public class Demo01 { // 定义好一个方法 public void test01(){ System.out.println("我是封装方法..."); } public static void main(String[] args) { // 需要使用的时候直接调用 Demo01 demo01 = new Demo01(); demo01.test01(); } }
-
好处:
让代码更加清晰有条理,利于维护。减少了不必要的重复性代码的编写,当使用到之前已经定义过的方法时,直接调用写好的方法即可,不需要再重新编写对应的代码。从一定程度上来说,也可以提高开发的效率。
2. 继承
-
定义:
将一些类的共性提取出来,然后统一放在一个类中,当有其他类需要执行属性的时候,直接继承该类就可以获得这些属性,不需要在重新去定义一次。
-
示例:
-
定义一个父类Person,里面定义好一个方法
public class Person { public void pserson(){ System.out.println("person..."); } }
-
定义一个子类Teacher,继承父类Person
public class Teacher extends Person { public static void main(String[] args) { Teacher teacher = new Teacher(); // 继承了父类之后就拥有了父类的可继承属性 teacher.pserson(); } }
-
-
好处:
减少了重复代码的编写,利于程序后期的维护。
-
注意:
-
当子类继承父类之后并且重写了子类自己的构造方法(重写运行时调用该类时,会自动调用类中的构造方法),所以在程序运行时会自动去先调用父类的构造方法然后再去调用子类的构造方法(先有父亲才有儿子)。
-
子类的构造方法中会程序会自动的添加super(),但是当父类中的构造方法有参数的时候则需要手动添加super(参数1,参数2)
-
super();这个语句必须是构造方法中的第一个java语句
-
如果子类中需要访问父类中的方法,可以 super.method(方法名)
-
-
继承的特点
-
java的的继承的单继承的,不支持多继承关系,也就是说一个子类只能有一个直接父类。
但是一个父类可以拥有许多的子类。
-
3. 多态
-
定义:
-
父类引用指向子类对象(父类的一种类型,子类的多种表现型态)。
-
格式:
父类名称 对象名 = new 子类名称();
-
或者:
接口名称 对象名 = new 实现类名称();
-
-
示例:
父类A:
public class A { public void method() { System.out.println("父类方法"); } public void methodFu() { System.out.println("父类特有方法"); } }
子类B:
public class Zi extends Fu { @Override public void method() { System.out.println("子类方法"); } }
多态:
public class MultiDemo { public static void main(String[] args) { // 对象类型是父类A的,但是实际new的时候是子类B A a = new B(); a.method(); a.methodFu(); } }
-
向上造型
向上造型之后就不能再使用原来子类中特有的方法。
-
格式:
父类名称 对象名 = new 子类名称();
-
或者:
接口名称 对象名 = new 实现类名称();
-
-
向下造型
如果想将之前已经向上造型的对象重新还原回到之前的类型,使之可以调用子类中特有的方法,那就可以使用向下造型。
-
格式
需要还原的对象类型 对象名 = (需要还原的对象类型 )需要还原的对象名;
需要注意的是:
这个向下造型不一定成功,因为在执行向下造型的时候“需要还原的对象类型”的类型必须与之前向下造型的时候子类类型一致,否则将转换失败(在编译器的时候不会报错,在运行期时会出现错误)。
- 所以在转换之前,一个先使用 instanceof 这个方法判断一下。
-
-