zoukankan      html  css  js  c++  java
  • 抽象类与抽象方法

    抽象类:关键字(abstract)

    为什么需要抽象类?

    1.父类的方法体好多情况下是没有内容的。

    2.子类万一没有重写正确,也没有提示。

    抽象类的定义:abstract class 返回类型 类名;

    抽象方法的定义:

    普通方法的写法:public void KaiShi(){}

    抽象方法的写法:public void KaiShi();   (没有方法体);

    抽象方法与抽象类的关系:

    抽象类中可以没有抽象方法;

    抽象方法所在的类必须是抽象类;

    注意:抽象类是不能被实例化的(不能直接被new出来)

    二:抽象方法的继承关系:

    1.当父类中有继承方法时(当然,有抽象方法那么它必须是个抽象类了),它的子类不是抽象类时,那么它的子类中必须继承父类中的抽象方法(这样就防止了你在子类中重写父类方法时写错的情况)例:

    图一:

    图二:

    2..当父类中有继承方法时(当然,有抽象方法那么它必须是个抽象类了),它的子类也是抽象类时,那么它的子类中可以不继承继承父类中的抽象方法(那么你写错后,会当做例外写了一个方法)例:

    图1:

    图2:

    当我再写一个图二中的派生类时,并且继承它里面的抽象方法时,他会自动继承JianPan的父类中的抽象方法:如下图所示

                           抽象类与接口中的方法访问修饰符的问题

    1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?



    2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。

  • 相关阅读:
    PHP 使用命名空间(namespace),实现自动加载
    快捷方式不能使用的解决方法
    Python学习案例
    Linux下Tomcat的安装和部署
    关于Linux下的环境变量
    关于Linux下安装Oracle
    Linux下安装MySQLdb模块(Python)
    交换机VLAN的定义、意义以及划分方式
    让java程序在后台一直执行(例如putty关闭后后台程序继续运行)
    基于FTP服务器搭建yum源
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6235668.html
Copyright © 2011-2022 走看看