java中面向对象的三大特性:封装继承多态和关键字instanceof
Posted java学习中的菜逼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中面向对象的三大特性:封装继承多态和关键字instanceof相关的知识,希望对你有一定的参考价值。
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);
运行结果:
我会看门
以上是关于java中面向对象的三大特性:封装继承多态和关键字instanceof的主要内容,如果未能解决你的问题,请参考以下文章