Java基础14 面向对象~接口和内部类

为热爱编程的你点赞!
学习SpringBoot实战课程 https://edu.csdn.net/course/detail/31433
学习SpringCloud入门课程 https://edu.csdn.net/course/detail/31451


面向对象系列:
类和对象
封装
继承
多态
static关键字和单例模式
接口和内部类

前言

Hello,大家好,接口是Java中的一个重要的类型,实际项目开发中会大量使用到接口,称为:面向接口编程,本章将重点接口以及内部类。

接口

接口是什么

在这里插入图片描述
生活中的接口
如电脑上的USB接口,规范了接口的形状、尺寸等,只要符合该规范的设备就可以连接上去。

程序中的接口
是一套规范,规定了方法的定义,只要是实现了该接口的类必须按照接口的规范来定义。

使用接口

定义接口的语法:

public interface 接口名{
	静态常量的定义;
	方法的定义;
}

定义接口要注意:

  1. 方法是abstract的,不能实现
  2. 定义的属性会自动转变为静态常量
  3. 方法只能是public的,默认是public

实现接口

public class 类名 implements 接口名{
	具体方法的实现
}

实现接口要注意:

  1. 必须实现所有接口中的方法
  2. 方法必须和接口中定义的完全一致
  3. 方法必须是public的
  4. 一个类可以实现多个接口
  5. 一个类可以继承类同时实现接口
class 类名 extends 父类 implements 接口{
}
  1. 接口可以继承接口,实现类必须实现所有的方法
interface A{
	void testA();
}
//接口之间的继承
interface B extends A{
	void testB();
}
class C implements B{
	public void testA() {
	}
	public void testB() {
	}
}

接口在开发中的意义

  1. 为类的实现制定一套规范
  2. 把设计和实现分开

default关键字

Java1.8的新特性,被default定义的方法可以有默认的实现。

扫描二维码关注公众号,回复: 12192306 查看本文章
public interface Person {
	//给接口方法默认的实现
	default void eat(){
		System.out.println("在吃饭!!");
	}
	void walk();
}

实现类不强制要求实现带default的方法。

接口与抽象类的异同

接口和抽象类的区别是常见的面试题
相同点:

  1. 都可能存在没有实现的方法
  2. 都不能实例化

不同点:

  1. 抽象类是单一继承,类可以实现多个接口
  2. 接口不能定义构造方法
  3. 接口中的方法只能是public,抽象类可以有各种访问类型的方法。
  4. 接口中只能定义静态常量,抽象类可以定义普通的成员变量。
  5. 接口中的抽象方法不用加abstract,抽象类必须加。

内部类

内部类就是在类里面定义的类。
Java的内部类包含:

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类

和成员变量(属性)、成员方法同级的,都是属于某一个对象所有的。
语法:

class 外部类{
	class 内部类{
	...
	}
}

特点:

  • 一般只在外部类的里面使用
  • 成员内部类和类的属性和方法同一级别。
  • 属于类的对象,在创建每个对象时加载到内存

静态内部类

成员内部类加上static,就是静态内部类
语法:

public class 外部类{
	static class 内部类{
	}
}

和成员内部类的区别:

  1. 成员内部类属于对象,静态内部类属于外部类
  2. 成员内部类每创建一个对象加载一次,静态内部类和外部类一起加载
  3. 成员内部类能访问外部类的所有成员,静态内部类只能访问外部类静态的成员

局部内部类

在方法中定义的类,只能在当前方法中使用,方法调用时加载类到内存中。
语法:

class 外部类{
	public void test(){
		class 内部类{
		
		}
		内部类 对象 = new 内部类();
	}
}

匿名内部类

一个没有名字的内部类,创建类的同时创建了对象。
应用场合:接口或抽象类的实现类只需要使用一次,代码是一次性的。
语法:

new 接口/抽象类()
{
	实现方法
};

实现USB案例

//Usb接口
interface Usb{
	void connect(); //连接
	void charge(); //充电
}
//匿名内部类实现接口
Usb usb = new Usb(){
	public void connect(){
		System.out.println("Test2测试连接");
	}
	public void charge(){
		System.out.println("Test2测试充电");
	}
};
usb .connect();
usb .charge();

和一般类的区别:

  1. 没有名字
  2. 只能使用一次
  3. 没有构造方法
  4. 不能定义静态成员

面试题:在?处填写什么可以在控制台输出30,20,10。

class Outer {
 	public int num = 10;
     class Inner {
         public int num = 20;
         public void show() {
             int num = 30;
             System.out.println(?);   	num
             System.out.println(?);   	this.num
             System.out.println(?); 	Outer.this.num
         }
     }
 }

 class InnerClassTest {
     public static void main(String[] args) {
         Outer.Inner oi = new Outer().new Inner();
         oi.show();
     }    
 }   

结束

好了,本文大家都掌握了吗?欢迎留言讨论哦
留两个作业:

  1. 定义播放器接口,播放音乐方法;定义游戏机接口,玩游戏方法;
    定义电话类,有品牌和价格属性,和打电话方法
    定义手机类继承电话并实现播放器和游戏机接口
  2. 定义算术接口,分别定义加减乘除四个方法,每个方法都有两个double参数,返回值为double。
    使用常规类和匿名内部类两种方式实现接口。

大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总

猜你喜欢

转载自blog.csdn.net/u013343114/article/details/112523663