java中面向对象的三大特性:封装、继承、多态和…

2018-07-18 01:17:59来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

java中面向对象的三大特性:封装、继承、多态和关键字instanceof

1、封装:

使用private关键字,使得外界不能够直接访问类的属性;

提供setter和getter方法进行设置和获取;

好处:提升程序的安全性,让外界不能够直接进行访问;还可以对设置的属性进行输入限制;

public class anli1 {
private String name;
private String sex;
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
public String getSex() {
 return sex;
}
public void setSex(String sex) {
 this.sex = sex;
}
}

类中的属性name和性别sex进行了封装,在其它的类中不能够直接访问;

如果想要设置性别设置只能是男和女可以在setSex()方法中进行限制;

public void setSex(String sex) {
 if(sex.equals("男")||sex.equals("女")){
 this.sex = sex;
 }else{
  System.out.println("您设置的性别有误");
 }
}

在main中进行测试;

public static void main(String[] args) {
 anli1 a1=new anli1();
 anli1 a2=new anli1();
 a1.setSex("女性");
 a1.setName("a1");
 System.out.println(a1.getName()+a1.getSex());
 
 a2.setSex("女");
 a2.setName("a2");
 System.out.println(a2.getName()+a2.getSex());
}

结果:

您设置的性别有误
a1null
a2女

从输出结果中可以看到a1设置sex为女性,设置失败,而a2设置sex为nv成功了;

这样可以方便的进行输入限制,当然如果设置其他的限制也是一样的;

2、继承:extends

名如其意:便是继承父类中的属性和方法:

作用:减少代码的臃肿,提升代码的复用性;

注意:a、不能继承父类中的构造方法;b、不能继承父类中的private属性和方法;

新建一个anli2继承上面的案例1,并在里面新建立一个独有的方法;

public class anli2 extends anli1{
 
public void look(){
 System.out.println("我会看门");
}

}

在main中测试:

 anli2 b1=new anli2();
 b1.setName("b1");
 b1.setSex("男");
 System.out.println(b1.getName()+b1.getSex());

结果:

b1男

子类可以调用父类的除private外的属性和方法;

3、多态

一个事物的多种状态叫做多态。例如水有三种形态气态液态和固态;

在类中;由于子类继承了父类所有也使得一个事物具有了多种状态;

例如anli2继承了anli1,把anli1换成animal动物类anli2换成dog狗类

可以说,狗既能是一只狗,也可以说是一只动物;有两种说法;

利用多态的形式有两种:

a、向上转型:把子类的对象指向父类的引用类型;

 animal a1=new dog();

但是当狗作为一只动物的时候是不能够调用狗类的独有方法look()如果需要用到父类独有的方法需要向下转型;

b、向下转型:把指向父类的引用转换成指向子类的引用

 animal a1=new dog();//向上转型
 dog b2=(dog)a1;//向下转型
 b2.look();//子类独有的方法

注意要想向下转型必须要先向上转型;不能够直接把父类的引用指向子类的引用;

作用:可以解耦,减少耦合性;什么是耦合性?就是非它不可,就像我们的手机如果充电器坏掉了,如果只能用厂家原配充电器,

那么实用性就太差了,不符合需求;

解耦在类中的应用:如果父类有多个子类,在不知道子类是哪一个的情况下,可以把传入的参数设置为父类,那么它所有子类都可以传进参数,

这里用到了向上转型,一般结合instanceof关键字使用;

 

4. instanceof

作用:用于判断传入的引用类型是否属于给定的类型,一般是判断父类转型中的判断;

举例:新建一个service类,建立一个方法,传入参数animal

public class Service {
public void fun(animal a){//参数向上转型
 if(a instanceof dog){//判断传入的参数是否是dog
  ((dog) a).look();//向下转型
 }
}
}

在main方法中测试:

 animal a1=new dog();
 Service s=new Service();
 s.fun(a1);

运行结果:

我会看门

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:阿里架构师的日志:带你快速理解微服务架构;理解微服务架构的核

下一篇:Excel文件导入导出