Day13——JavaOOP——定义接口语法、内部类的优点、匿名内部类定义格式

接口
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;// 半径
	@Override
	public void perimeter() {
		System.out.println("周长:" + (2 * PI * r));
	}
	@Override
	public 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();
	}
}

使用成员内部类
两种方法:

  1. 间接方式:在外部类的方法中,使用内部类,然后main只调用外部类的方法。
  2. 直接方式:公式:
    一般类:类名称 对象名 = 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 类名或者接口名称() {
//覆盖重写所有抽象方法
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值