java面向对象的三大特性

来源:互联网 发布:手机抢网速软件 编辑:程序博客网 时间:2024/06/04 19:08

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类的一个对象,所以此时造型成功。

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


原创粉丝点击