body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

抽象类语法
◆抽象类和抽象方法必须使用  abstract  声明。
◆抽象方法不能有方法体。
◆抽象类不一定有抽象方法,但是含有抽象方法的类必须是抽象类。
◆抽象类本身不能实例化(但是多态机制可以用子类实例化)。
◆抽象类的子类:
       如果不想重写抽象类里面的抽象方法,则也必须是抽象类
        如果不是抽象类,则必须实现抽象父类的所有抽象方法
◆被abstract修饰的类称为抽象类,被abstract修饰的方法称为抽象方法。
◆抽象类不能被实例化,即不能使用抽象类的构造函数创建对象,抽象类中可以声明抽象方法,除此以外抽象类与一般的类没有区别。
◆抽象类只定义了类的部分行为,这些行为是子类共有的,其它行为由子类实现的抽象方法提供,因此抽象类通常作为一个框架,把子类将实现的抽象方法组织起来,简化或限制子类的设计
抽象类的成员特点:

◆抽象类的成员变量:即可以变量,又可以是常量
◆抽象类的构造方法:用于子类访问父类数据的初始化
◆抽象类的方法:可以是抽象的,也可以是非抽象的,作用是:
        抽象的:强制子类实现
        非抽象的:子类可以复用

接口的定义://接口往往用来描述一种功能,而不是一种类别;     接口可以理解为一个特殊的类,只有常量和抽象方法组成的特殊类

◆接口是用来实现类间多重继承功能的结构。
◆通过接口可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系
◆通过接口可以指明多个类需要实现的方法
◆接口中所有的方法默认都是 public abstract 的
◆接口中的成员变量默认都是 public static final 的
◆接口可以继承多个接口,但不能继承类

 一个完全抽象的类,所有的方法都是抽象方法
特点:
◆接口使用 Interface 关键字进行声明
       格式:Interface 接口名 {  }
◆类实现接口使用 implements 表示
       格式: class 类名 implements 接口名{ }
◆接口无法直接实例化
       如何实例化?由其具体的子类实例化
◆接口的子类
       要么是抽象类
       要么重写接口中所有的抽象方法

单亲继承与多亲继承:

◆Java语言中,类(Class)只支持单亲继承,一个类只能有唯一的父类
◆Java语言中,接口(Interface)可支持多亲继承,一个接口可以有多个父接口,子接口拥有所有父接口中声明的方法
◆接口中可以声明以下成员:
    (1) 成员
    (2) 方法
◆接口中的成员都是public的,不能指定其它的访问控制修饰符
◆接口中的成员变量默认是 static final 的,必须显式初始化
◆接口中的方法只能提供方法头声明,不能提供实现,且除abstract外,不能使用其它修饰符
接口的继承:
◆接口支持多亲继承,可以在关键字extends后面跟多个接口的列表,中间用逗号隔开,如:
    public interface SerializableRunnable
                extends java.io.Serializable, Runnable
    { …… }

interface IA{
    void ma();
    void mb();
}
interface IB extends IA{
    void mb();
    void mc();
}
class CA implements IB{
    public void ma(){ … }
    public void mb(){ … }
    public void mc(){ … }
}
abstract CB implement IB{
    public void ma(){ … }
    public void mc(){ … }
}

interface X{
    int val=1;
}
interface Y extends X{
    int val=2;
    int sum=val+X.val;
}


interface CardDealer{
    void draw();
    void deal();
    void shuffle();
}
interface GraphicalComponent{
    void draw();
    void draw(Device d);
    void rotate(int degrees);
    void fill(Color c);
}
interface GraphicalCardDealer extends GraphicalComponent, CardDealer{
    ……
}
◆子接口拥有所有父接口中声明的方法
◆子接口中的域将隐藏父接口中声明的同名域,被隐藏的父接口中的域必须通过父接口名访问
◆要定义接口的实现类,需在类头中使用关键字

接口中的方法覆盖和重载:
◆接口中的方法可以重载(Overload),可以声明方法名相同但签名不同的多个方法(包括父接口中的方法)
◆接口中的方法也可以覆盖(Override),但没有实际的意义,因为接口中不提供方法的实现

◆可以定义一个接口用extends关键字去继承一个已有的接口
◆可以定义一个类用implements关键字去实现一个接口中的所有方法
◆可以去定义一个抽象类用implements关键字去实现一个接口中定义的部分方法。
◆一个类可以继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implements关键字之前 。
实现一个接口就是要实现该接口的所有方法(抽象类除外)
接口中的方法都是抽象的
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
java反射技术:
 public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.getClass().getSimpleName());
    }
}

运行结果:Test
import java.lang.reflect.Method;
public class Test {
    public void invoke(){
    }
    public static void main(String[] args) {
        Test test = new Test();
        Class clazz = test.getClass();
        Method[] methods = clazz.getDeclaredMethods();  
//返回类class所指定的方法,方法没在形参表声明,参数什么都没有,就返回所有无参的放法数组
        for(Method method:methods){
            System.out.println(method.getName());
        }
    }
}

运行结果: invoke
                 main
/*已知每种交通工具的参数都是3个整数A、B、C的表达式。
现有两种工具:Car 和Plane,
其中Car 的速度运算公式为:A*B/C,
Plane 的速度运算公式为  :A+B+C。
需要编写三类:ComputeTime.java,Plane.java,Car.java和接口Common.java.
要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。
其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别时整数A、B、C,
举例如下:     
计算Plane的时间:”java ComputeTime Plane 20 30 40″
计算Car007的时间:”java ComputeTime Car  23 34 45″
如果第3种交通工具为Ship,则只需要编写Ship.java,运行时输入:”java ComputeTime Ship 22 33 44″*/

package com.java.zuoye7;
public interface Common {
        public double speed(double a,double b,double c);
}

package com.java.zuoye7;
public class Car implements Common{
        public double speed(double a,double b,double c){
                return a*b/c;
        }
}


package com.java.zuoye7;
public class Plane implements Common{
        public double speed(double a,double b,double c){
                return a+b+c;
        }
}

package com.java.zuoye7;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ComputeTime {
        public static void main(String[] args) {
                try {
                        System.out.println("我进来了");
                        Class cl = Class.forName("com.work07."+args[0]);
//static Class<?> forName(String className)
// 返回与带有给定字符串名的类或接口相关联的 Class 对象。
                        Object obj = cl.newInstance();
//创建此 Class 对象所表示的类的一个新实例。
                        Method m = obj.getClass().getDeclaredMethod("speed", double.class,double.class,double.class);  
//double.class  返回double所属的类对象Class<double>
//Class<?> getClass() 返回此 Object 的运行时类;就是返回obj具体属于哪个类的类名
//Method getDeclaredMethod(String name, Class<?>... parameterTypes)
// 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。参数指明了哪个方法,有什么参数
                        double a  = Double.parseDouble(args[1]);
// 程序运行参数传参都默认的是String
// static double parseDouble(String s)
// 返回一个新的 double 值,该值被初始化为用指定 String 表示的值,这与 Double 类的 valueOf 方法一样。
                        double b  = Double.parseDouble(args[2]);
                        double c  = Double.parseDouble(args[3]);
                        double speed = (double)m.invoke(obj, a,b,c);
// Object invoke(Object obj, Object... args)
// 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。        
                        double time = 1000/speed;
                        System.out.println("the time of "+args[0]+"run 1000 kilometers is "+time);
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) {
                        e.printStackTrace();
                }
        }
}

Java静态方法可以类名调用和对象调用;如果都在同一类体忠,可以直接类名调用

Java——抽象类、接口的更多相关文章

  1. Java抽象类接口、内部类题库

    一.    选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  C  ).(选择一项)   public class Person { public String nam ...

  2. java 抽象类&接口

    1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化.   2,抽象关键字不可以和那些关键字共存? private 不行 static 不行 final 不行   final关键字: 1,fina ...

  3. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  4. java 抽象类 接口 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...

  5. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  6. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. java抽象类和接口区别

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. Java接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...

  9. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  10. [转载]深入理解JAVA的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

随机推荐

  1. Warm up---hdu4612(缩点,树的直径)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4612 给一个无向图, 加上一条边后,求桥最少有几个: 那我们加的那条边的两个顶点u,v:一定是u,v之 ...

  2. ARM上电启动及Uboot代码分析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianlong4526888/article/details/27698707 注意:由于文档是去年 ...

  3. Struts,Spring,Hibernate优缺点

    Struts跟Tomcat.Turbine等诸 多Apache项目一样,是开源软件,这是它的一大优点.使开发者能更深入的了解其内部实现机制. Struts开放源码框架的创建是为了使开发者在构建基于Ja ...

  4. CentOS7 安装mysql-5.7.10(glibc版)

    groupadd mysql useradd -r -g mysql mysql 修改mysql目录及子文件属主和属组 chown -R mysql:mysql mysql shell> cd ...

  5. js-template-art【一】简述

    一.官方地址 地址:https://github.com/aui/art-template 二.概述 官方对比 三.特性 拥有接近 JavaScript 渲染极限的的性能 调试友好:语法.运行时错误日 ...

  6. python之threading.local

    简述: threading.local是全局变量但是它的值却在当前调用它的线程当中 作用: 在threading module中,有一个非常特别的类local.一旦在主线程实例化了一个local,它会 ...

  7. Windows7系统运行hadoop报Failed to locate the winutils binary in the hadoop binary path错误

    程序运行的过程中,报Failed to locate the winutils binary in the hadoop binary path  Java.io.IOException: Could ...

  8. PAT 1061 Dating[简单]

    1061 Dating(20 分) Sherlock Holmes received a note with some strange strings: Let's date! 3485djDkxh4 ...

  9. Docker(二)

    Docker Compose 多主机网络 容器集群管理 Docker结合Jenkins构建持续集成环境 Docker结合Consul实现服务发现 Docker API 日志管理

  10. Java 异步处理 三种实现

    new Thread((new Runnable() { @Override public void run() { // 批量同步数据 try { logger.info("^^^^^^^ ...