java面向对象的三大特性

1.封装

封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以将自己的数据和方法只让可信的类和方法操作,对不可信的进行信息隐蔽。

2.继承

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可从现有的一个类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类或子类,而原始类称为新类的基类或父类。派生类可以从基类那继承所有东西(成员变量和成员方法)。但不一定都能使用,每个成员都有自己的访问属性,子类是不能访问父类的私有成员和方法的。子类可以修改或增加新的方法使之更适合特殊的需要。

3.多态

多态是指不同类的对象对同一消息做出响应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为代码、代码共享等优势,很好的解决了应用程序函数同名问题。

java多态的具体表现:
1.方法的重载。重载是指同一个类中有多个相同的方法名,但其参数类型不同。是编译时多态。重载可以被看作一个类中的方法多态性。
2.方法的覆盖。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。因为是在运行时才知道调用的是子类还是父类的方法,所以是运行时多 态。
3.父类的变量可以指向子类的对象,而且可以随时更换其它子类的对象。
下面写一个父类Animal:
public class Animal {
	
	public Animal(){
		System.out.println("这是一只动物");
	}
	
}
再写两个子类Dog和Cat:
public class Dog extends Animal {

	public Dog() {
		System.out.println("这是一只狗");
	}

}
public class Cat extends Animal {
	public Cat(){
		System.out.println("这是一只猫");
	}
}

再写一个测试类:
public class Text {

	public static void main(String[] args) {
		Cat cat = new Cat();
		System.out.println("-----------");
		Dog dog = new Dog();
	}

}
运行时输出:
这是一只动物
这是一只猫
------------------
这是一只动物
这是一只狗

这个例子很简单,大家都懂!就是简单的子类继承,然后子类实例化。这里需要注意的是:在创建子类对象时,会先调用父类的构造方法,再调用子类的构造方法。

我们把测试类给改一下:
public class Text {

	public static void main(String[] args) {
		Animal cat = new Cat();
		System.out.println("-----------");
		Animal dog = new Dog();
	}

}
运行时输出:
这是一只动物
这是一只猫
------------------
这是一只动物
这是一只狗

输出没有任何问题,但在这个Text类中我们使用父类的变量指向了子类的对象,这就是向上造型。也是多态的一种表现形式。也就是说,对象变量可以保存自己本身的对象及其子类的对象。

向上造型:子类对象-->父类对象 安全
向下造型:父类对象-->子类对象 不安全

下面演示一下向下造型:
public class Text {

	public static void main(String[] args) {
		Animal ani = new Animal();
		Dog dog = (Dog)ani;
	}

}
输出结果:
这是一只动物
Exception in thread "main" java.lang.ClassCastException: Animal cannot be cast to Dog
at Text.main(Text.java:6)
此时运行出错,类造型异常。因为此时ani实际指向的就是Animal类,即父类本身。不可能将它看成Dog类。
再来一个Text类:
public class Text {

	public static void main(String[] args) {
		Animal ani = new Animal();
		ani = new Dog();
		Dog dog = (Dog)ani;
	}

}
输出结果:
这是一只动物
这是一只动物
这是一只狗

此时运行正常,ani实际指向的就是Dog类的一个对象,所以此时造型成功。

因此向下造型是不安全的,我们必须知道具体的实现类。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值