java接口、类

接口:

[修饰符] interface 接口名 [extends 父接口名1,父接口名2,...]{

[public] [static] [final] 类型 变量;

[public] [abstract] 方法;

}

修饰符,可选参数,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。

接口名,必选参数,用于指定接口的名称,接口名必须是合法的java标示符。一般首字母大写。

extends父接口名列表,可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。

方法,接口中的方法只有定义而没有被实现。

eg:

public interface Calculate{

float pi = 3.14;

float getArea(float r);

}

等价于:

public interface Calculate{

public fianl float pi = 3.14;

public abstract float getArea(float r);

}

接口的实现:

[修饰符]class 类名 [extends 父类名] [implements 接口列表]{

}

修饰符,可选参数,用于指定类的访问权限,可选值为public、abstract、final。

类名,必选参数,用于指定类的名称,类名必须是合法的java标示符。一般情况下,首字母大写。

extends 父类名,可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。

implements 接口列表,可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。

eg:

public interface Calculate{

float pi = 3.14;

float getArea(float r);

}

public class Circle implements Calculate{

public float getArea(float r){

return pi * r * r;

}

}

继承的实现:

[修饰符] class 子类名 extends 父类名{

}

修饰符,可选参数,用于指定类的访问权限,可选值为public、abstract、final。

子类名,必选参数,用于指定子类的名称,类名称必须是合法的java标示符。一般情况下,首字母大写。

extends 父类名,必选参数,用于指定要定义的子类继承于哪个父类。

eg:

public class Bird{

protected String color;

protected String skin;

}

public class extends Bird{

public void fly(){

}

}

抽象类:

abstract class 类名{

}

eg:

public abstract class Fruit{

protected String color;

public Fruit(){

color = "green";

}

}

抽象方法(不能使用private或static关键字修饰,因为要在子类中重写,不能用类名直接调用方法)

abstact <方法返回值类型> 方法名(参数列表);

eg:

public abstract class Fruit{

protected String color;

public Fruit(){

color = "green";

}

public abstract void harvest();

}

成员内部类(内部类只能在外部类中使用,一般作为外部类的成员变量,内部类的实例化操作必须在外部类或外部类中的非静态方法中;内部类可以访问外部类成员)

public class OuterClass{

private class InnerClass{

}

}

eg:

public class OuterClass{

private int i = 0;

private void g(){

}

private InnerClass{

void f(){

g();

i++;

}

}

}

局部内部类(在类的方法中定义的类,他得作用范围也是在这个方法体内)

eg:

public class SellOutClass{

private String name;

public SellOutClass(){

name = "apple";

}

public void sell(double price){

class Apple{

double price;

public Apple(double price){

this.price = price;

}

public void price(){

System.out.println("现在开始卖" + name);

System.out.println("单价为:" + price);

}

}

Apple a = new Apple(price);

a.price();

}

}

匿名内部类(匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写;但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口)

eg1:不使用匿名内部类来实现抽象方法

public abstract class Person {

public abstract void eat();

}

public class Child extends Person {

public void eat() {

System.out.println("eat something");

}

}

public class Test {

public static void main(String[] args) {

Person p = new Child();

p.eat();

}

}

运行结果:eat something

可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用.但是,如果Child类只使用一次,那么将其编写为独立的一个类有些浪费。这个时候就引入了匿名内部类。

eg2:匿名内部类的基本实现

public abstract class Person {

public abstract void eat();

}

public class Test {

public static void main(String[] args) {

Person p = new Person() {

public void eat() {

System.out.println("eat something");

}

};

p.eat();

}

}

运行结果:eat something

可以看到,我们直接将抽象类Person中的方法在大括号中实现了,这样便可以省略一个类的书写;并且,匿名内部类还能用于接口上。

eg3:在接口上使用匿名内部类

public interface Person {

public abstract void eat();

}

public class Test {

public static void main(String[] args) {

Person p = new Person() {

public void eat() {

System.out.println("eat something");

}

};

p.eat();

}

}

运行结果:eat something

由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现;当然一般类的子类也可以使用匿名内部类来实现。

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。

eg4:Thread类的匿名内部类实现

public class Test {

public static void main(String[] args) {

Thread t = new Thread() {

public void run() {

for (int i = 1; i <= 3; i++) {

System.out.print(i + " ");

}

}

};

t.start();

}

}

运行结果:1 2 3

eg5:Runnable接口的匿名内部类实现

public class Test {

public static void main(String[] args) {

Runnable r = new Runnable() {

public void run() {

for (int i = 1; i <= 3; i++) {

System.out.print(i + " ");

}

}

};

Thread t = new Thread(r);

t.start();

}

}

运行结果:1 2 3

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 09:48:23

java接口、类的相关文章

java接口、接口、类、抽象类的区别

1.定义 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 2.Java接口与接口区别 Java接口,Java语言中存在的结构,有特定的语法和结构. package jiekou; public interface AreaInterface{ double pai=Math.PI; double area(); } 以上程序就是Java接口,是一个结构: 接口,一个类所

Selenium Webdriver自动化测试设计(webdriver自动化架构设计、定义接口、日志处理、Java Robot类应用)

给各位网友分享一套课程,有兴趣的可以加我 2748165793 更多免费资料,可以查看http://blog.sina.com.cn/sonyandnokia码农的开心乐园 课程大纲第1章节:课程介绍概要介绍selenium介绍webdirver介绍webdriver环境搭建 第2章节Selenium IDE介绍IDE实例讲解录制回放过程录制脚本的导出IDE插件的介绍以及安装方法 第3章节Selenium 识别对象的方法包括:id,name,class name,link text,partia

Java 接口与类

最近组里的任务还不是很忙,在看mybatis的内容,发现项目里很多接口,就把今后要改造的部分代码看了一下.在读前辈的代码的时候,发现一个特点:接口的多继承很多.于是就到网上找了些继承和接口的用法,重温一下,也总结一下下. 继承 1.Java中的类不支持多继承,即一个子类至多有一个父类. 2.子类继承了父类中的不是私有的成员变量和成员方法. 3.当子类中的成员变量和成员方法和父类中的一致时,那么父类的方法被覆盖了. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

获取Java接口的所有实现类

获取Java接口的所有实现类 前言:想看基于spring 的最简单实现方法,请直接看 第七步. 本文价值在于 包扫描的原理探究和实现 一.背景 项目开发中,使用Netty做服务端,保持长连接与客户端(agent)通讯.Netty服务端需要根据不同消息类型,加载对应的Processer(消息处理器)对消息进行处理.问题就出现了,Processer会随着消息业务类型增多进行扩展,每一次增加Processer都需要手动new出来一个实例,放到Map里(key为消息类型码,value为Processer

java -- 抽象类与接口类

一.protected权限修饰符 public class ProtectedTest { public static void main(String[] args) { // protected修饰的属性和方法本包中可以调用. // 不同包中的子类也可以访问protected修饰的属性和方法 Person person = new Person(); } } import com.atguigu.exer.Person; public class ProtectedTest { public

基于Java+HttpClient+TestNG的接口自动化测试框架(五)------ 测试用函数接口类及实现类

在前一篇中,我们着重阐述了参数的处理方法. 但是,这些参数基本都是直接赋值的.而实际的接口测试中,我们会根据需要做成很多的测试数据,这些测试数据会根据不同的情况来使用.例如,我可能需要一个能够随机生成一个中文的字符串,或者需要一个能够迅速求出一个文件或者字符串的MD5的值.在这种情况下,就需要我们动手去写一些函数来进行调用. 不过,如果是在Excel(或者其他文本编辑器)中写测试用例,如何才能让程序能够知道我是在调用一个函数,并且能够把这个函数的返回值赋给变量,正确的传入我想要的地方呢?下面,我

java基础2.-------interface接口类,实现接口

1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动生成方法 子类继承两个父类接口 实现类实现所有方法

Java 接口和抽象类区别

1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了.当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 .面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,我就不能不提到曾让我头痛的Java接口和Java抽象类了,这也是本文我想说的重点. 既然面向对象设计的重点在于

Java复用类

Java复用类 Java复用类一般有两种方法. 一,组合:在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法成为组合. import java.util.*; class WaterSource{ private String s; WaterSource(){ System.out.println("WaterSource()"); s="constructed"; } public String toString(){ return s;

java 接口的作用和好处

1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意义很疑惑.不知道接口到底是有什么作用,为什么要定义接口. 好像定义接口是提前做了个多余的工作.下面我给大家总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Jav