面向对象的三大特性

面向对象的三大特性

今天给大家简单讲解下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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值