接口
Interface(因特费死)
接口在Java中是最重要的概念之一,它可以被理解为一种特殊的类,是由全局常量和公共的抽象方法所组成。
需要注意的是,在接口中的抽象方法必须定义为public访问权限,这是不可更改的。
接口是多个类的方法的抽象
接口是抽象类的抽象(抽象的不是一个类了,所以不需要遵守类的单继承)
接口是java中程序编写过程中对方法的规范,接口中只能声明全局常量(基本不写),方法全部由public abstract修饰(接口定义时可以省略)
定义接口语法
public interface 接口名{抽象方法}
创建一个接口
接口实现语法
public class实现类名 implements 接口名1,接口名2
创建实现类实现多个接口,通过重写的方式实现指定接口中的方法
//图形接口
public interface Figure {
//接口使用interface修饰 且没有class关键字(接口不是类)//接口中只能声明静态常量与抽象方法//在开发过程中基本不会定义静态常量且接口中所有权限修饰符为public//且定义方法时 可以省略public 或abstract //如果省略系统会自动添加public 或abstract void perimeter();//求图形周长方法abstract void area();//求图形面积方法 // public void a();// public abstract void b();
}
//圆形类
public class Are implements Figure {
// 创建实现类 implements实现 接口名public static final double PI = Math.PI;public double r;// 半径@Overridepublic void perimeter() {
System.out.println("周长:" + (2 * PI * r));}@Overridepublic void area() {
System.out.println("面积:" + (PI * r * r));}}
A a=new CTest();//使用接口保存实现类对象//A接口中的方法 在指定实现类已被实现//被实现的方法可以调用//多态只能调用声明的父类(接口)中的方法//实际保存的对象(实现类/子类)重写的父类(接口)中的方法//当调用时 jvm根据当前对象选择实际调用的方法
接口的特点
接口不可以被实例化,不能有构造方法,但是可以声明对象
接口中的所有成员都是public static final。
接口中的方法都是抽象方法,接口中的方法会自动使用public abstract修饰。
一个类可以同时实现多个接口。
实现类必须实现接口中的所有方法。
接口可以继承接口(接口可以继承多个接口)
接口中不能出现静态方法,因为abstract 不能修饰static
static的方法是不能被继承的
内部类
类中类
在一个类中定义另一个类
package com.yunhe.day1212;
//内部类
//在一个类中定义另外一个类
//语法:
//public class 外部类{
// public class内部类{}
//
//}
public class InnerClass {
public class myClass {
public void myClass() {
System.out.println("这是内部类");}}public void innerClass() {
System.out.println("这是外部类");}public void aaaaaa() {
myClass my = new myClass();my.myClass();}
}
使用成员内部类
两种方法:
- 间接方式:在外部类的方法中,使用内部类,然后main只调用外部类的方法。
- 直接方式:公式:
一般类:类名称 对象名 = new 类名称();
成员内部类:外部内名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
InnerClass ic = new InnerClass();ic.innerClass();//内部类方法使用//1、间接方式//在外部类中声明公开的方法 调用内部类的方法ic.aaaaaa();//2、直接方式//直接创建内部类对象调用内部类方法//语法 外部内名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();InnerClass.myClass mc=new InnerClass().new myClass();mc.myClass();
内部类属性的使用与方法一样分为间接方式/直接方式
内部类的优点
1、 创建的内部类作用域范围为当前外部类(安全性)
2、 减少了文件的创建(节省资源)
3、 内部类可以直接访问外部类的属性(属性共用)
匿名内部类
概念:如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
匿名内部类定义格式:
接口名称 对象名 = new 类名或者接口名称() {
//覆盖重写所有抽象方法
};