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

抽象类:abstract class

接口:interface

在java的类中,只要有一个方法为抽象方法,那么该类就是抽象类。换句话说,抽象类可以提供部分方法的具体实现,这一点在接口中是不被允许的。

接口中,只能够有方法的定义,而不能有方法体。

关于抽象类和接口,很容易看出来它们并不能对对象进行实例化操作,那么它们的唯一存在意义就是拿来继承用的。假如说一个继承了抽象类的类,如果没有将父类的抽象方法全部实现,那么它仍然是一个抽象类。

抽象类中的抽象方法必须是public或者protect的(默认为public),这很容易想明白,如果抽象方法是private的话,那么子类就不能重写该方法,因而就没有意义了。其实,抽象类中可以定义具体的方法还是一个

很不错的优点的,举个栗子,当你想为某个模块添加一个新功能时,你只需要在抽象类中添加一个方法具体实现,那么继承这个抽象类的所有实现类都轻而易举的拥有了这个方法。

说完抽象类,感觉跟接口差不多啊,可以这样理解,接口要比抽象类更加抽象,并且定义更加严格。

接口中的属性和方法分别被隐式的修饰为public static final和public abstract,当然一般情况下是不建议在接口中放置属性的。假如说要在接口中添加一个新的抽象方法,那么实现这个接口的所有类都必须实现

该抽象方法,这一点要比抽象类要麻烦得多。

说了这么多,再来比较一下接口和抽象类的区别吧。

java是单继承机制的语言(C++是多继承的),因此当一个实现类继承一个抽象类是,它的类型就比较单一。而接口则不同,如果一个类实现了一个接口的所有抽象方法,那么该类就拥有此接口

的类型,而且一个类可以实现多个接口,因此这个类就有了更多的类型。

还有一个区别,那就是在抽象类中可以有静态方法和静态变量,而接口是不允许的。

那么到底应该在什么时候用他们呢,个人是这样理解的,抽象类和子类的关系更偏向于”是或者不是的关系“,更倾向于一些固有属性,比如说人肯定是有”两只手两只脚“之类的属性。而接口和子类的关系则偏向于”有

或者没有的关系“,比如说这个人带了一顶帽子,那个人却没带。

在网上找到了一个很有趣的例子

     interface Window{
             public void draw();
             public void putColor();
             public void setPosition();
      }

     abstract class DesignedPage implements Window{
             public void draw(){}
             public void putColor(){}
     }

      public class DesingedPageA  extends DesignedPage{
             public void setPosition(){
                   //set the window position
             }
    }

这里接口有三个方法,但是作为该模块内部的一个对象,我只想用他的setposition()方法,其他的我并不想看到,那就可以这样来做:

1.创建一个抽象类Designedpage,然后我们把不想看到的方法draw()和putcolor()加上去,方法体设置为空(实际上这样写表明已经

在抽象类中实现了这两个方法)。

2.然后忽略掉想要实现的方法setposition(),此时应为该类是抽象类并不用完全实现该接口。

3.在该抽象类的实现类中再实现setposition()方法,这样便可方便的实现了所需的功能。

从这里也可以看出,抽象类是”对内“的,而接口是”对外“的,用于创造一个统一的对外口径。

之所以能这样写,是因为抽象类是不能被实例化的,所以没有要求实现所有的方法。但是没写出的方法还是隐式的存在的。
当你在定义一个实现类继承抽象类的话,就必须要全部实现。

参考资料:http://fishswing.iteye.com/blog/1527166

时间: 2024-10-07 19:53:09

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

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("

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

关于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.p