`

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

    博客分类:
  • 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抽象类与接口实例...

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

    在编程世界中,抽象类、反射、动态绑定和接口是面向对象编程的重要概念,它们各自在不同的场景下发挥着关键作用。以下是对这些概念的详细解释: **抽象类(Abstract Class)** 抽象类是不能被实例化的类,它通常...

    接口与抽象类区别

    接口与抽象类区别 在软件开发中,接口和抽象类是两个常用的概念,但它们之间的区别却让许多人感到困惑。那么,什么是抽象类和接口?它们之间有什么区别?下面,我们就来详细地探讨这个问题。 一、抽象类 抽象类是...

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...

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

    这反映了两者在概念上的不同定位:抽象类强调的是“是什么”的关系(例如,狗是动物的一种),而接口强调的是“能做什么”的关系(例如,飞行动物可以飞行)。 ##### 多态性与扩展性 - **抽象类**:当需要添加新的...

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    Java语言的接口与抽象类

    4. 绑定关系:抽象类与子类有从属绑定,接口与实现类之间没有这种绑定。 5. 动态绑定:两者都支持运行时多态,即父类引用指向子类对象。 在使用原则方面: 1. 抽象类:通常用于一组相关子类共享代码,减少代码冗余...

    C#抽象类与接口方法

    【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...

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

    这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...

    java抽象类与接口区别

    ### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...

    java 抽象类与接口的区别

    6. 继承关系:抽象类遵循传统的继承关系,接口之间可以采用多重继承,即一个接口可以继承多个其他接口。 在实际开发中,我们通常会根据需求来选择使用抽象类还是接口。如果需要为一组相关的类提供公共的属性和方法...

    java中接口与抽象类的详细分析与比较

    在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键...通过阅读"java中接口与抽象类的详细分析与比较.doc"文档,你将获得更深入的洞察和实践指导,进一步提升你的Java编程能力。

    抽象类与接口的区别

    ### 抽象类与接口的区别 #### 一、理解抽象类与接口的基本概念 在面向对象编程中,抽象类和接口都是重要的概念,用于描述共有的特性或行为,但它们在实现方式和用途上有所不同。 **抽象类**: - **定义**:抽象类...

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

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

    Java抽象类和接口和继承之间关系

    "Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...

    第7章 抽象类与接口.ppt

    在Java编程语言中,抽象类和接口是两种重要的机制,用于实现代码的抽象和多态性。本章主要探讨了这两个概念以及它们在实际编程中的应用。 首先,抽象类(abstract class)是一种不能被实例化的类,它通常含有至少一...

    \\java类、抽象类、接口、继承和对象解析 .doc

    5. **接口与抽象类的关系** - 抽象类可以包含非抽象方法的实现,而接口则只能定义方法签名,不能有实现。 - 类可以继承一个抽象类,并实现多个接口。这意味着抽象类和接口提供了不同的多态性形式。 - 当需要一组...

    Java 接口和抽象类

    Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...

    JAVA中抽象类与接口的区别

    在Java编程语言中,抽象类(Abstract Class)与接口(Interface)是实现抽象与多态性的两种关键机制。这两种机制的出现,极大地丰富了Java语言的面向对象特性,并为开发者提供了更为灵活的设计选择。下面将从多个...

    C#接口抽象类区别实例

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

Global site tag (gtag.js) - Google Analytics