前言:记录自己在工作中遇到的小问题,积少成多!因为是新手,有什么写的不好的地方还希望大家指出来。有什么更好的方法也希望大家能够提出来,一起交流学习。(小弟先在这里谢谢大家)
正文:
一、接口介绍:
1、接口概述
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法!这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情!
2、接口的定义:
[修饰符] interface 接口名称 extends 接口1,接口2...... {
方法1(){};
方法2(){};
}
修饰符:可选,用于指定接口的访问权限;
接口名称:必选,用于指定接口的名称,接口名称必须符合Java标识规范,一般首字符要求大写;
extends:可选,用于指定继承的父接口名称(接口可多和继承);
方法:接口中的只有定义而没有实现;
下面为一个接口的定义例子:
public interface CalInterface{
public final float PI=3.14159f;//定义用于表示圆周率的常量PI
public float getArea(float r);//定义一个用于计算面积的方法getArea()
float getCircumference(float r);//定义一个用于计算周长的方法getCircumference()
}
3、接口的实现:
[修饰符] class 类名称 [继承 父类名称] [implements 接口列表]{
方法1(){};
方法2(){};
}
修饰符:可选,用于指定类的访问权限;
类名:必选,用于指定类的名称,类名称必须符合Java标识规范,一般首字符要求大写;
extends:可选,用于指定继承的父类(超类)名称(类只能单继承);
implements:可选,用于指定该类实现的接口名称(可多实现,接口与接口之间用“,”分割);
下面为一个接口实现的例子:
public class Cire implements CalInterface{
public float getArea(float r){
float area=PI*r*r;//计算圆面积并赋值给变量area
return area;//返回计算后的圆面积
}
public float getCircumference(float r){
float circumference=2*PI*r; //计算圆周长并赋值给变量circumference
return circumference; //返回计算后的圆周长
}
public static void main(String[] args){
Cire c = new Cire();
float f = c.getArea(2.0f);
System.out.println(Float.toString(f));
}
}
4、接口注意事项;
①、一个接口可以继承多个接口:
interface C extends A,B{} 这样写是可以的
(注意:一个类只能继承一个类,类是单继承!但是可以写成A继承B,B继承C,这样A就同时可以用B和C里面的方法)
②、一个类可以实现多个接口:
class C implements A,B{} 这样写是可以的
③、类在继承类的同时,也可以实现接口
二、抽象类介绍
1、抽象类概述:
抽象类是用来捕捉子类通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是用来创建继承层级里子类的模板!
2、抽象类的定义:
[修饰符] abstract [类名] [extends 抽象类]{
方法1(){};
方法2(){};
}
修饰符:可选,用于指定抽象类的访问权限;
类名:必选,用于指定抽象类的名称,类名必须符合Java标识规范,一般要求首字母大写;
extends:可选,用于指定该类继承的抽象类名称(单继承);
下面为一个抽象类的两个例子:
abstract class A { // 定义抽象类a
public static final String FLAG = "CHINA";
private String name = "张三";
public String getName() {// 取得name的值
return name;
}
public void setName(String name) { // 设置name值
this.name = name;
}
public abstract void print(); // 声明抽象方法
}
class B extends A { // B继承A
public void print() { // 覆写A类的print方法
System.out.println("FLAG=" + FLAG);
System.out.println("姓名=" + super.getName());
}
}
public class AbstractDemo02 {
public static void main(String args[]) {
B b = new B(); // 初始化B类
b.print(); // 调用B类的orint()方法
}
}
结果:
FLAG=CHINA
姓名=张三
//抽象类的声明
abstract class Animal {
String type;
String name;
int age;
int weight;
void eat() {
System.out.println("动物爱吃饭");
}
//抽象方法在抽象类中只能声明,不能具体实现
abstract void breath();
void sleep() {
System.out.println("动物在睡觉");
}
}
//由子类去继承父类抽象类
class tiger extends Animal{
@Override
//在此处实现抽象方法
void breath() {
// TODO Auto-generated method stub
System.out.println("老虎在呼吸");
}
}
public class first_for {
public static void main(String [] args){
// 错误,程序会报错
//报错原因:抽象类不能进行实例化操作
//Animal Tiger = new Animal();
//只能用子类进行实例化
Animal Tiger = new tiger();
Tiger.breath();
}
}
结果:老虎在呼吸
3、抽象类注意事项:
①抽象类里面的方法不一定是抽象方法,但是含有抽象方法的类,一定是抽象类;
②抽象方法在抽象类中只能声明,不能具体实现;
③由子类去继承父类的抽象类;
④子类继承父类以后,必须实现其父类(超类)抽象方法
⑤抽象方法不能进行实例化操作;
⑥只能用子类进行实例化;