抽象类、接口、多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助。

一、抽象类

  1、形式

 abstract class Ceshi
{
abstract void show();
}
class DemoA extends Ceshi
{
void show()
{
System.out.print("Hello world");
}
}

  2、特点

    a、抽象类不可以被实例化

    b、抽象类必须有其子类覆盖了所有抽象方法后,该子类才可以实例化,否则,该子类还是抽象类。

    c、抽象方法必须定义在抽象类中,该类必须也被abstract修饰。

  3、那么问题来了

    a、抽象类有构造函数吗?

      有,用于给子类实例化。

    b、抽象类可以不定义抽象方法吗?

      事实上是可以的,但是很少见。

    c、抽象类和一般类的异同点。
      相同点:
        抽象类和一般类都是用来描述事物的,都在内部定了成员。
      不同点:
        1,一般类有足够的信息描述事物。抽象类描述事物的信息有可能不足。
        2,一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。
        3,一般类可以被实例化。抽象类不可以被实例化。

二、接口

  从某种意义上说,接口是一种特殊形式的抽象类,在java语言中抽象类表示的是一种继承关系,一个类只能继承继承一个抽象类,而一个类却可以实现多个接口。

我们都知道接口的定义方式是

interface Demo
{
void show();
}

其实对于接口当中常见的成员:而且这些成员都有固定的修饰符。
 a、全局常量: public static final

b、抽象方法:public abstract

1、由此得出结论,接口中的成员都是公共的权限。即全写是

interface Demo
{
public static final int num = 4;
public abstract void showa();
}

2、接口特点

  a、接口是对外暴露的规则,是程序功能的扩展。

  b、接口降低了耦合性。

  c、一个类可以实现多个接口

    

abstract class Test2 extends Q implements A,Z
{
}

3、接口与抽象类异同点

  相同点:
    都是不断向上抽取而来的。

  不同点:

    1,抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现。

    2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。接口中只能定义抽象方法,必须由子类去实现。

三、多态

  一个对象有不同的形态,这就是多态。

  比如 动物 ani = new 狗();

  这就是多态在代码中的体现:父类引用指向子类对象。

1、多态好处与弊端

  多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容。

  多态的弊端:前期定义的内容不能使用(调用)后期子类的特有内容。

2、向下转型

动物 ani = new Cat();
Cat c = (Cat)ani;

3、内部类

  内部类是我们以前建的比较少的,其实就是类里面有类。

class Outer//外部类
{
class Inner// 内部类。
{
}
}

  a、内部类如何引用外部类?

  内部类持有了外部类的引用。  外部类名.this。

class Outer
{
int num = 3;
class Inner
{
int num = 4;
void show()
{
int num = 5;
System.out.println(Outer.this.num);
}
}
void method()
{
new Inner().show();
}
}

3、内部类可以存放在局部位置上,且在局部位置上只能访问局部中被final修饰的局部变量。

class Outer
{
void method()
{
final int x = 9;
class Inner
{
public String toString()
{
}
}
}
}

4、匿名内部类

匿名内部类是内部类的一种简写形式,其实就是一个匿名子对象。

    public void method()
{
new Demo()//匿名内部类。
{
void show()
{
System.out.println("show:"+num);
}
}.show();
}

四、最后

抽象类、接口和多态虽然简单,但是常用,尤其像是内部类、匿名内部类这些我们以前接触较少,更应该重点掌握。

详解java基础--抽象类、接口与多态的更多相关文章

  1. java基础(11):接口、多态

    1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...

  2. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  3. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

  4. 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性

    文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...

  5. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  6. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  7. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  8. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  9. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

随机推荐

  1. Java类加载机制?

    深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比 ...

  2. 设备没有可用空间 /var/spool/clientmqueue sendmail

    [root@hadoop3 /]# crontab -e/tmp/crontab.TB7A7w: 设备上没有空间[root@hadoop3 /]# df -Bg文件系统 1G-块 已用 可用 已用% ...

  3. 从远程Linux Copy文件到本机 界面化操作

    1.安装SSHSecureShellClient 2.打开 3.设置1,然后打开2就可以操作了

  4. android 改变状态栏(StatusBar)颜色

    public static void changeColor(Activity paramActivity, int paramInt1) { if (Build.VERSION.SDK_INT &g ...

  5. I.MX6 Android shutdown shell command

    /******************************************************************************* * I.MX6 Android shu ...

  6. 并不对劲的bzoj4827:loj2020:p3723:[AHOI/HNOI2017]礼物

    题目大意 有两个长度为\(n\)(\(n\leq5*10^4\))的数列\(x_1,x_2,...,x_n\)和\(y_1,y_2,...,y_n\),两个数列里的数都不超过\(m\)(\(m\leq ...

  7. [转]如何用git将项目代码上传到github

    注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之 ...

  8. nginx中查看关于php的配置和php-fpm的重启等操作

    1.查看当前使用的php的配置信息 在php项目的根目录下新建findini.php文件,内容如下: <?php phpinfo(); ?> 然后在页面上访问就可以看到如下页面: 搜索Lo ...

  9. J20170524-hm

    取りこぼし 意外地输给较自己实力弱的对手,爆出冷门,败给手下败将 振り分け 分配,整理 スキーマ 图解.模式.图式

  10. 【性能测试】服务器资源监测工具sar安装

    [root@yyy ~]# sar Cannot open /var/log/sa/sa19: No such file or directory 在Linux系统中,运行sar命令,发现无法执行: ...