面向对象的三大特性

面向对象的三大特性

继承:

作为面向对象三大特性之一的继承特点,就好像是我们现实生活中父与子的关系,使用关键字extends来标识两个类之间的关系。

public class Son extends Father{}

简单来说一下,JAVA是一门单根继承的语言,所有的类追踪下去都会寻找到一个最终的父类——Object。
要注意子类只能继承一个父类,但是一个父类可以有多个子类。
当子类继承了父类之后,子类就具有了父类的特性 ,可以在使用自身属性和方法的同时,也能够使用到父类的属性和方法。

public class Father {
	String method;
	public void fatherMethod01() {
		System.out.println("父类的方法一");
	}
	public void fatherMethod02() {
		System.out.println("父类的方法二");
	}
}
public class Son extends Father{
	String son;
	public void sonMethod01() {
		System.out.println("子类的方法一");
	}
	public void fatherMethod02() {
		System.out.println("重写父类的方法二");
	}
}

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		son.method = "abc";
		son.fatherMethod01();
		son.fatherMethod02();
		son.sonMethod01();
	}
}

封装:

封装是将数据和方法隐藏起来,防止外部成员对该类的代码进行任意的访问或修改。
封装的优点是可以减少代码的耦合性,实现自己可以对该类的代码进行访问。修改,但是其他人不能够对该类的代码进行访问、修改。可以很好的将实现功能的细节隐藏起来,提高代码的安全性。
封装的实现主要是使用访问修饰符来实现。

public class Person {
	private String name;
	private String sex;
	private int age;
	

	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;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

多态:

也可以称作是动态绑定、后期绑定或运行时绑定,它是根据运行时数据的类型来判断主体。
使用多态可以帮助我们消除多个类型之间的耦合关系,并且使程序有了可扩展性,我们可以从过使用通用的父类继承出新的数据类型,而不需要改变对应的接收参数的方法。
但是多态也是有缺点的,就是父类的引用不能调取子类的属性和方法。
修改之前继承代码的Test类,使用多态实现向上转型:

public class Test {
	public static void main(String[] args) {
		//子类向上转型
		Father f = new Son();
//		f.sonMethod01();//报错,提示要将方法sonMethod01修改为Father类型
		f.fatherMethod01();
		f.fatherMethod02();
	}
}

通过上述的代码,我们可以清楚的认识到。当子类向上转型后,只能调用父类中的属性或者方法,或是被子类重写的父类中的方法,子类自己的方法和属性并不能被访问到。
向下转型的时候需要注意,在进行类型转换的时候一定要使用instanceof判断是否可以进行类型转换,否则会出ClassCastException 类型转换异常。

public class Test {
	public static void main(String[] args) {
		//向上转型
		Animal an = new Dog();
		//向下转型
		if(an instanceof Dog) {
			Dog dog  = (Dog) an;
			System.out.println("狗");
		}else if(an instanceof Cat) {//这里因为对象an是由Dog类型向上转型的,所以不能够再向下转型为Cat类型
			Cat cat = (Cat) an;
			System.out.println("猫");
		}else {
			System.out.println("都不是");
		}
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值