java面向对象的三大特性

xiaoxiao2021-02-28  140

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类的一个对象,所以此时造型成功。 因此向下造型是不安全的,我们必须知道具体的实现类。
转载请注明原文地址: https://www.6miu.com/read-63662.html

最新回复(0)