关于JAVA继承、多态、抽象类、接口等性质的学习(2)

关于多态,先看一个简单的例子

class A{
    public void A1(){
        System.out.println("1");
    }
    public void A2(){
        System.out.println("2");
    }

}

public class Test2 extends A{
    public Test2() {
        // TODO Auto-generated constructor stub
    }
    public void A1(){
        System.out.println("3");
    }
    public void A2(){
        System.out.println("4");
    }

    public static void main(String[] args){

        Test2 t1 = new Test2();
        A t2 = new Test2();

        t1.A1();
        t1.A2();
        t2.A1();
        t2.A2();
    }

}

从上面例子可以看出,子类重写了基类的A1(),A2()方法,之后分别建立了两个子类对象,将其中一个赋给子类型的引用t1,另外一个赋给基类型的引用t2。接下来对两个引用分别调用A1、A2方法。

3
4
3
4

上面是输出结果,t1因为是test2类型所以正确的显示出了子类A1,A2方法的结果。但是接下来t2是基类型的,看起来应当输出的是基类A1,A2方法的结果,但是编译器却是输出了子类A1,A2方法的结果。实际上这就是多态性的体现,这里要提到后期绑定这个

概念,后期绑定是由编译器完成的,在编译时,编译器不需要获得任何特殊信息就能进行正确的调用。

简单来说就是:父类型的引用可以指向子类型的对象。

还有就是当用父类的引用调用一个父类没有的方法是,要对其进行强制类型转换,例如

A t1 = new Test1();

Test1 t3 = (Test1)t1;

t3.A3();   // 这里的A3假设为子类特有的方法。

套用java编程思想的话说,多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术,我们所做的代码修改,不会对程序中其他不应受到影响的部分产生破坏。

注:静态方法只能继承而不能重写,也就是说子类继承了基类的静态方法后,如果调用的话,要视此时的引用是基类型还是子类型,是什么类型的引用就调用谁的方法。

最后总结一下多态的特性:

首先得有继承关系存在,接下来基类的方法是要被重写的,而且该方法必须是public,最后子类创建的对象要指向父类的引用。

时间: 2024-10-11 00:51:01

关于JAVA继承、多态、抽象类、接口等性质的学习(2)的相关文章

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

java----基础(this,继承,多态,抽象类,接口)

this指针 this指针在类定义时用到,this属于用类实例化的对象,只能在定义类的时候使用:(在下面的代码中会有体现) 类变量&类方法 定义: 访问修饰符 static+数据类型+变量名 所有该类的对象均可访问,均可修改,不会在调用后初始化,相当于全局变量. 可以被所有对象访问到,并且可以通过类访问到  类名.类变量 静态方法 == 类方法 可以被类名和对象访问到 原则上类变量用类方法来访问 类方法中不能访问非类变量,类变量可以被非类方法访问. 四种访问控制符: public : 对外公开

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

关于JAVA继承、多态、抽象类、接口等性质的学习(3)

抽象类:abstract class 接口:interface 在java的类中,只要有一个方法为抽象方法,那么该类就是抽象类.换句话说,抽象类可以提供部分方法的具体实现,这一点在接口中是不被允许的. 接口中,只能够有方法的定义,而不能有方法体. 关于抽象类和接口,很容易看出来它们并不能对对象进行实例化操作,那么它们的唯一存在意义就是拿来继承用的.假如说一个继承了抽象类的类,如果没有将父类的抽象方法全部实现,那么它仍然是一个抽象类. 抽象类中的抽象方法必须是public或者protect的(默认

2019-05-17 Java学习日记之面向对象_多态&抽象类&接口

多态 多态的概述: A:多态(polymorphic) 事物存在的多种形态 B:多态前提 a:要有继承关系 b:要有方法重写c:要有父类引用指向子类对象 多态中的成员访问特点之成员变量: 成员变量:编译看左边(父类),运行看左边(父类)多态中的成员访问特点之成员方法:成员方法:编译看左边(父类),运行看右边(子类)多态中的成员访问特点之静态成员方法:静态方法:编译看左边(父类),运行看左边(父类)(静态和类相关,算不上重写,所以访问还是左边的)只有非静态的成员方法,编译看左边,运行看右边 多态的

06 面向对象:多态&抽象类&接口&权限修饰符&内部类

多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父类),运行看左边(父类). * 成员方法 * 编译看左边(父类),运行看右边(子类).动态绑定 * 静态方法 * 编译看左边(父类),运行看左边(父类). * (静态和类相关,算不上重写,所以,访问还是左边的) * 只有非静态的成员方法,编译看左边,运行看右边 */ class Demo_Polym

JAVA 之 多态 抽象 接口

一:多态 1:多态   一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写父类中同名成员方法 5:使用instanceof关键字判断对象的真正类型 语句形式   引用instanceof 类名 eg;Empe=new Hourly(); if(einstanceofHourly){ Hourlyx=(Hourly) e;// 强制转换一个Hourly类型 } 6:多态的应用

<--------------------------Java继承及抽象类------------------------------>

1 继承的好处 1.1.继承的出现提高了代码的复用性,提高软件开发效率. 1.2.继承的出现让类与类之间产生了关系,提供了多态的前提. 2 继承的注意事项 *a:在Java中,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的. class A{} class B{} class C extends A,B{} // C类不可以同时继承A类和B类3 继承后子类父类成员变量的特点 ***** a:子类的对象调用成员变量的时候,子类自己有,使用子类,子类自己没有调用的父类 b:当子父类中出

关于java继承、多态、抽象类、接口等性质的学习(1)

最近几日把JAVA编程思想翻了翻,顿时发现以前看的所谓XXX从入门到精通系列讲的简直不能看,只能是当做入门中的入门书吧. 为了日后不会忘记,把一些想法写下来. 关于继承和多态 我想继承是面向对象语言不可少的一部分吧,引用JAVA编程思想的一句话:“当创建一个类时,总是在继承”.继承通过extends关键字实现,继承实现后,基类中所有的域和方法都可以得到. class First{ private String s = "extend"; First(){ } public void t