Java——抽象类、接口
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;}
接口的定义://接口往往用来描述一种功能,而不是一种类别; 接口可以理解为一个特殊的类,只有常量和抽象方法组成的特殊类
◆接口是用来实现类间多重继承功能的结构。
◆通过接口可以实现不相关类的相同行为,而不需考虑这些类之间的层次关系
◆通过接口可以指明多个类需要实现的方法
◆接口中所有的方法默认都是 public abstract 的
◆接口中的成员变量默认都是 public static final 的
◆接口可以继承多个接口,但不能继承类
|
单亲继承与多亲继承:
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{
……
}
|
实现一个接口就是要实现该接口的所有方法(抽象类除外)
接口中的方法都是抽象的
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
|
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. Person类和Test类的代码如下所示,则代码中的错误语句是( C ).(选择一项) public class Person { public String nam ...
- java 抽象类&接口
1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2,抽象关键字不可以和那些关键字共存? private 不行 static 不行 final 不行 final关键字: 1,fina ...
- java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)
抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...
- java 抽象类 接口 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- java抽象类和接口区别
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- Java接口、Java抽象类、C++抽象类的区别
由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...
- java抽象类与接口的区别及用法
java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...
- [转载]深入理解JAVA的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- SQL Server 复制(Replication) ——事务复制搭建
本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企 ...
- 用SQL语句检查CPU和磁盘空间
--查看4小时内的CPU变化值,1分钟统计一次 DECLARE @ts_now BIGINT; SELECT @ts_now = ms_ticks FROM sys.dm_os_sys_info; - ...
- tools-eclipse-001-如何安装插件
插件的安装方法大体有以下三种: 第一种:直接复制法: 假设你的Eclipse的在(C:\eclipse), 解压你下载的 eclipse 插件或者安装eclipse 插件到指定目录AA(c:\AA)文 ...
- python实现文件夹遍历
python 中os.path模块用于操作文件或文件夹 os.path.exists(path) 判断文件路径是否存在 dir = "c:\windows"if os.path.e ...
- java之简单工厂
1.使用步骤 创建抽象/接口产品类,定义具体产品的公共接口方法:(产品接口类) 创建具体产品类,是继承抽象产品类的:(产品接口实现类) 创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品 ...
- Atcoder CADDi 2018 Solution
C - Product and GCD Solved. 题意: 给出$n个数$的乘积,求$这n个数$的最大的可能是GCD 思路: 分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$ #i ...
- hdu5184 数论证明
这题说的给了一个整数n 和一串的括号, 那么要我们计算 最后有n/2对括号的 方案数有多少. 我们可以先预先判断一些不可能组成正确括号对的情况, 然后我们可以将这个问题转化到二维平面上, 令 m = ...
- TED #02#
Amanda Palmer: The art of asking 1. I think people have been obsessed with the wrong question, which ...
- Vue学习笔记之Vue学习前的准备工作
0x00 起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐 ...
- qq空间相册下载
qq空间相册下载 描述 目前功能只可以下载 单个相册 程序基本是3个独立分开的部分. 解析(某一用户)所有相册 解析(单个)相册所有图片地址并写文件 根据文件下载图片 目的 只要有权限可以访问到的相册 ...