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

一、抽象类

  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();
}

四、最后

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

最新文章

  1. .Net配置中心-服务端/客户端
  2. 四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释差异
  3. Testlink与Redmine关联
  4. python学习笔记之装饰器、递归、算法(第四天)
  5. js表单提交,面向对象
  6. Html 网页布局(一)
  7. hdu 1016 Prime Ring Problem(DFS)
  8. python笔记 - day7-1 之面向对象编程
  9. phpmailer 实现发送邮件
  10. POJ 1979 深度优先搜索
  11. stm32之RCC
  12. mysql的1067错误 - 2
  13. WPF MediaElement播放器2
  14. Swift的基础之关于“!”和“?”的使用介绍
  15. 禁止WPS2019开机自启动
  16. pycaffe简明文档
  17. word,excel,ppt,txt转换为 PDF
  18. Dynamics 365 CRM 添加自定义按钮
  19. 大数据和hadoop的一些基础知识
  20. POSTMAN模拟http请求

热门文章

  1. Fluently NHibernate映射多个实体程序集
  2. POJ 3368 Frequent values RMQ ST算法/线段树
  3. pymssql.connect(server='.', user='', password='', database='', timeout=0, login_timeout=60, charset='UTF-8', as_dict=False, host='', appname=None, port='1433', conn_properties, autocommit=False, tds_
  4. 磁盘扩容 磁盘阵列(Redundant Arrays of Independent Disks,RAID)
  5. CXF Spring 使用
  6. java垃圾回收机制的使用
  7. bzoj2461: [BeiJing2011]符环
  8. Android开发之自定义对话框
  9. Oracle VM VirtualBox启动新建虚拟机弹错--不能为虚拟机xxxx电脑 打开一个新任务
  10. bzoj1951