面向对象的三大特性

来源:互联网 发布:拍照解题的软件 编辑:程序博客网 时间:2024/06/15 23:27

面向对象的三大特性

今天给大家简单讲解下java中面向对象的三大特性:

  • 封装性
  • 继承性
  • 多态性

封装性

  • 概念:顾名思义,封装性就是吧一个对象封装成一个类,并且这个类可以提供一些属性和方法来让给别的类和外部进行调用,这样即保护了代码防止被窃,也提高了代码的复用性。

举个例子如下

public class Test{    private int a;    public void setA(int a){        this.a =a ;    }    public int getA(){        return a    }}

这里我们有个int类型的属性a,这是个私有的属性,只能在本类中使用,同时我们这有一个公共setA方法和getA方法,如果别的类或者外部想调用这个a属性,那么他们只能通过这2个公共的方法才操作。
顺便一提,访问权限修饰符从低到高的顺序是:private ,(default),protected,public

继承性

  • 概念:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

这里,我们将描述2种常见的继承方式。
1.类的集成。
2.接口的实现。

在java中,继承类的我们称之为子类,被集成的叫做父类。一个子类只能继承一个父类,所以,在java中类的继承是单继承。但是接口的实现是多继承的,也就是说一个类可以实现多个接口。

这里涉及到了2个很重要的关键字:extends 和 implements
举例如下:

public class A extends B{}public class C implements DE{}

这里类A是继承类B的,所以A是子类,B是父类。类C是实现了接口D和接口E的。

java中有一个特殊的类叫Object类这个类是所有类的父类。

  • super和this关键字
    super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
    this关键字:指向自己的引用。

  • final关键字
    final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
    声明类:
    final class 类名 {//类体}
    声明方法:
    修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}

  • 构造方法
    简单的说,调用子类的构造方法时,一定会先调用父类的无参构造方法,而且只调用一次。可以使用super关键字来调用父类别的构造方法,假如父类没有无参构造方法,子类又没有掉用别的构造方法,那么编译的时候将会报错。

public class A{    public A(int a){    }}class B extends A{}public static void main (String【】 a){ // B b = new B();编译时不会通过。因为没有调用到父类A的构造器。}正确的B类是这样的:class B extends A{super(a);}
  • 方法覆盖
    就是子类复写了父类中的方法。实现了同方法名,同返回值,同参数下不同的功能。
    这里有4个原则:1.同方法名。2。同返回值。3.同参数。4.子类的访问权限修饰符不小于父类。

多态性

  • 概念:简单来说就是同一个行为具有多个不同的表现形式或形态的能力。

这里有一个Dog类集成Animal类:
子类的对象放在父类的引用中,例如 Animal a=new Dog(),子类对象当父类对象来使用。在实际运用中只能调用a对象在Animal中的方法,但是结果是Dog中的结果。举例如下:
有Animal类中有sleep()方法,sleep()中睡8小时;子类Dog中有 sleep()方法中睡6小时,还有wangwang()方法。现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。

  • 自动转换和强制转换

自动转换
如,在 Animal a=new Dog()中,将一个Dog子类的对象当作为父类Animal来使用。这样没有任何问题。

强制转换
如, Animal b = new Animal(); Dog c = (Dog) b;
这样用一个子类类型加一个小阔号来对一个对象进行强制转换。但是,这样编译是不会出错的,但是运行的时候是会出ClassCastException的异常。

instanceof 关键字
对于判断对象是不是与类相符,返回的是一个boolean值。
举例如下:

public class A{} class B extends A{ } public static void main (String[] a){     A a = new A();     B b = new B();     System.out.printl(a instanceof A);      System.out.printl(b instanceof A);     }

最后的输出结果将是
true
false