`

接口,抽象类与接口的关系。多肽、向上转型与动态绑定的引出

    博客分类:
  • j2se
 
阅读更多
第一:在引入接口之前,首先要知道什么是抽象类。下面是关于抽象类的定义格式:
abstract class absClass
{
public void show()
{
//这是一个非抽象的方法,下面是个抽象方法。
}

public abstract void method();
}

第二:由抽象类引出接口:
如果一抽个象类中方法全部为抽象方法,该抽象类可以为一个接口接口是抽象类的特殊形式,或者说接口就是彻底的抽象。

第三:接口的定义格式:全部是抽象方法
interface 接口名
{
public  void method();
........
}

第四:接口的实现(使用):接口是一种约束、规定
  class 类名(实现类)  implements 接口名
{
重写接口中的抽象方法
}

第五:总结
1.抽象类里可以有不抽象的方法,但是接口里的方法必须都是抽象的
2.实现类在继承接口之后,必须重写接口中的全部抽象方法,否则此实现类无法编译成功。
3.如果实现类不想重写接口中的抽象方法,那么此实现类就需要定义成抽象类(因为定义成抽象类之后就可以不用重写抽象方法了,因为抽象类里可以有抽象方法)
4.当抽象类里都是抽象方法的时候就定义为接口,接口里的抽象类不用不用写abstract,因为默认为abstract了
5.在接口中的属性int a=1;其实是在接口中写了public static final int a=1;也就是说接口中的变量默认为常量。注释:其实在项目中经常用到接口,比如dao的impl层
6.单继承多实现(一个类只能继承一个父类(如果继承两个类,而且两个类中有方法名一样的方法的时候,子类运行的时候就不知道是继承的哪个父类的方法了),但是可以实现多个接口)
7.多继承多实现(一个接口可以多继承(首先:接口的多继承指的是继承多个接口,第二:由于继承的父类也都是接口,因此即使多个父类之间有相同的方法名的时候也没事,反正每个父类中的该方法都没有方法体),多实现)

第六:抽象类与接口的关系:
1.当父类中的方法都为抽象方法的时候,此时把父类用interface关键字修饰,把此父类里面的所有抽象方法用abstract来修饰,abstract可以省略不写。
2.抽象类和类之间是继承关系,接口和类之间是实现关系。因此抽象类定义的是整个系统中的基本功能(因为子类继承抽象类之后必须重写抽象类中的抽象方法,否则此子类也是抽象的或者子类就会报错了),接口定义整个系统中的扩展功能(我们把每个子类都必须用到的方法,并且父类的该方法体不知道该写什么(因为即使父类写了方法体也会被众多子类重写掉)的时候,该方法可以写在抽象类中作为抽象方法;但是某些抽象方法不是买个子类都会用到,此时就把这个扩展方法写在接口中,哪个子类想用哪个子类就去实现该口)

--------------------------------------------------
下面是多肽:

第一:在学习多肽之前,我们就已经在用多肽的理论了:
比如说,方法的重载就是多肽,当我们传入的实参不同的时候,就会得到不同的返回值(结果)。这就是我们身边的方法多肽。我们此时学习的多肽是对象多肽

第二:(对象多肽)多肽的概念:一个对象能够表现不同的形态(同一个引用表现不同的行为)。
当引用数据类型的变量的数据类型和所引用的值的类型不一致的时候,有可能发生多态(等号两边的类型不一致的时候)
第三:继承和多肽的区别:
   Zi zi=new zi();//这是继承
   Fu  fu=new zi();//这是多肽,等号两边类型不一致
注意:
1.Fu  fu=new zi()是编译时看左边,运行时看右边。
2.此时调用一下:fu.show(),编译的时候是编译父类,运行的时候,如果子类重写了父类的show方法,那么此时会执行子类的show方法,否则会执行父类的show方法。
3.fu.ziMthod()的时候会报错,因为父类中没有ziMthod()方法,编译的时候看父类,因此编译的时候会报错。也就是说多肽不能访问子类特有的功能(根据多肽的定义:一个对象能够表现出不同的形态也能看出,是在说父类中的方法,而不是子类特有的方法)。
4.Fu  fu=new zi()这种写法是在程序中是发生了向上转型(也就是在编译的时候是在编译父类),向上转型只能访问父类中声明过的方法,而且是自动发生的(将子类对象转型成父类的引用)。
5.动态绑定:多肽在发生向上转型之后必定会产生动态绑定(向上转型是多肽的编译时期,动态绑定是发生在运行时期)。
编译的时候不知道具体的对象类型(例如动物类),只有程序运行的时候才能将具体的对象绑定到相应的对象中(此时才知道具体绑定的是猫还是狗)。
6.Fu fu = new Zi();//继承多态
  Inter it =new InterImpl(); //接口多态




----多肽的代码
public class Fu
{
public void show()
{
System.out.println("-------this is fu");
}

public void method()
{
System.out.println("-------this method fu");
}
}


public class Zi extends Fu
{
//重写父类中的方法
public void show()
{
System.out.println("-----this is zi");
}

public void ziMethod()
{
System.out.println("-----this ziMethod zi");
}

public static void main(String[] args)
{
//Zi zi = new Zi();
//zi.show();
//zi.method();
//z1.ziMethod();
        //当引用数据类型的变量的数据类型和所引用的值的类型
//不一致的时候,有可能发生多态
Fu fu = new Zi();
//fu.method();
//fu.ziMthod();
fu.show();

/**
当程序编译看=的左边

运行的时候看=的右边(1 如果有重写发生,调用自己的
2 如果没有重写发生,调用父类的)
*/
}
}

  


分享到:
评论

相关推荐

    java抽象类与接口实例java抽象类与接口实例

    java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...

    C#抽象类与接口方法

    抽象类与接口 抽象类与接口 抽象类与接口 抽象类与接口

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    抽象类、反射、动态绑定、及接口的使用

    抽象类、反射、动态绑定、及接口的使用 rar压缩文件

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    详细解析Java中抽象类和接口的区别

    抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...

    C#接口抽象类区别实例

    (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中 (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个...

    java 抽象类与接口的练习

    java 抽象类与接口的练习,包括代码及注释,个人笔记

    抽象类与接口的区别

    抽象类与接口的区别,抽象类与接口的具体应用

    接口与抽象类区别

    主要介绍接口与抽象类的区别,为那些困惑的人指点迷津。

    抽象类和接口实验报告.doc

    抽象类和接口实验报告

    第7章 抽象类与接口.ppt

    第7章 抽象类与接口.ppt第7章 抽象类与接口.ppt

    C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例

    C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例 C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例

    java抽象类与接口区别

    深入浅出的说明java抽象类与接口区别,让初学者更好的理解java抽象类与接口的概念

    dot Net中抽象类与接口的区别

    详细介绍了dot Net中抽象类与接口的区别 3.1 相同点 • 都不能被直接实例化,都可以通过继承实现其抽象方法。 • 都是面向抽象编程的技术基础,实现了诸多的设计模式。 3.2 不同点 • 接口支持多...

    11.java接口和抽象类的区别.zip

    11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....

    Java中抽象类和接口的区别

    在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,...

    基于Java抽象类和接口实现疯狂动物城

    学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...

    10.java接口和抽象类的相似性.zip

    10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和...

Global site tag (gtag.js) - Google Analytics