接口与多态

java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable......;//这个是错误来的。但是可以声明接口变量Comparable x; //这是允许的也可以调用方法,但是不管用,因为单纯定义的接口变量,没有构造函数,无法再jvm堆里面开开辟空间

JAVA接口声明一个变量是什么意思?

不是接口变量,而是一个接口类型的引用指向了一个实现给接口的对象,这是java中的一种多态现象
java中的接口不能被实例化,但是可以通过接口引用指向一个对象,这样通过接口来调用方法可以屏蔽掉具体的方法的实现,这是在JAVA编程中经常用到的接口回调,也就是经常说的面向接口的编程

 

 

首先接口不能实例化对象这是毋庸置疑的

原因:1.实际语义是实例化一个实现该接口的匿名内部类,接口本身是用来抽象的,实例化接口没有意义。

  2.实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student对象s,并且实例化一个Student对象,实则是在堆中开辟出一块空间来存放Student对象,s则是指向这块空间这也就是为什么print(对象)=y对象那个地址,也就是内存中的一块地址。这块地址中所存放的值就是我们这个Student对象的一些属性。而接口是抽象,没有具体方法的实现,但是有静态变量。

 3.本人认为 类继承实现了接口就类似于子类继承父类(因为你继承接口的时候把方法重写了,就类似于直接季继承了父类,在这理解为向上转型。) 而且new dd()可以理解为一个匿名类,这样的话返回的值向上兼容,这样的话,接口引用c就指向了具体的实现接口的对象,多态的体现。

 

 

 

多态:(父类引用指向子类对象,继承,重写) 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

 

 

 

多态演示:

package com.hp.test.Datafour;

class teacher{

public int Tage=40;

public void test(){

System.out.println("I am teacher");

}

}

public class student extends teacher{

publicint Sage=18;

public void test(){

System.out.println("I am student");

}

public void myself(){

System.out.println("It's myself");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

teacher t=new teacher();

teacher DT=new student();//子类也是一种特殊的父类,java允许吧一个子类对象直接赋值给一个父类引用变量,而不需要任何类型转换(向上转型),由系统自动完成。但是系统编译时候,DT还是还是teacher类型,但是运行时后是student类型,所以当运行时后,表现出来的方法行为总是子类对象的方法,而非父类的。所以这就出现,相同类型的变量、调用同一个方法是偶,呈现出多种不同的行为特征,这就是多态。

DT.test();

System.out.println("调用DT.Tage="+DT.Tage);//输出父类的实例变量值40非子类18.对象的实例变量不具备多态性。

//DT.myself();  并没有提供该方法,即使子类拥有。因为DT始终是父类引用变量,编译类型是父类,因此无法调用子类特有的恶方法。

}

}

执行结果

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值