java的面向对象基础(3) —— 接口,抽象类、内部类、匿名内部类

嵌入式之路,贵在日常点滴

                                                                ---阿杰在线送代码

目录

一、抽象类概念和作用(abstract) 

抽象类 

抽象方法的特点:

抽象类的特点:

抽象类的使用方法 (抽象类不能实例化)

抽象类的应用:模板方法模式

二、接口

接口的概念 

接口与类的区别 

接口的特点 

接口的声明 

接口的使用 

接口实现与抽象类继承的区别 

接口的多继承 

三、 内部类

概念 

内部类的主要特点

成员内部类(使用较多)及应用

(1)创建成员内部类的实例 

(2)在成员内部类中访问外部类的成员方法和属性 

(3)外部类不能直接访问内部类的成员,必须先建立内部类的对象才能访问 

成员内部类有以下限制

四、匿名内部类

概念

匿名内部类的创建与访问

(1)创建后立即访问  

(2)当然,也可以用“多态”进行访问(目前我也不知道多态是啥) 

(3)匿名内部类实现一个接口


一、抽象类概念和作用(abstract) 

抽象类 

java中可以定义没有方法体(只有方法头)的方法,该方法由子类来具体实现。

该没有方法体的方法我们称之为抽象方法含有抽象方法的类我们称之为抽象类。 

抽象方法的特点:

  • 只有方法头没有方法体的方法称为抽象方法
  • 抽象方法用abstract来修饰
  • 抽象方法代表一种不确定的操作或行为
  • 抽象方法不能被调用 

抽象类的特点:

  • 定义中含有抽象方法的类叫做抽象类
  • 抽象类用abstract来修饰
  • 抽象类代表一种抽象的对象类型
  • 抽象类不能实例化
  • 抽象类中可以有具体方法,可以没有抽象方法 

抽象类的使用方法 (抽象类不能实例化

没有做一个类来继承这个抽象类,这个时候声明类并实例化会报错,

如何解决:完成提示的方法体(ALT /),不靠谱的使用方式(这种不靠谱的方式也是后面提及的匿名的内部类

abstract class Demo1
{
	abstract public void printInfo();
	//在抽象类里面的方法,要么完善方法体,要么作为抽象方法
	//没有方法体的方法,该方法由子类来具体实现
}

//抽象类不能实例化
public class Demo {
	public static void main(String[] args) {
		
		Demo1 d = new Demo1() {
			
			public void printInfo() {
				// TODO Auto-generated method stub
				System.out.println("demo1 print");
			}
		};
		
		d.printInfo();
	}
}

运行结果:

demo1 print 

做一个类来继承这个抽象类,继承的时候把方法体实现了,如下: 

abstract class Demo1//抽象类
{
	abstract public void printInfo();//抽象方法
	//在抽象类里面的方法,要么完善方法体,要么作为抽象方法
	//没有方法体的方法,该方法由子类来具体实现
}

class Demo2 extends Demo1
{
	public void printInfo() {
		// TODO Auto-generated method stub
		System.out.println("来自:Demo2");
	}
	
}

public class Demo {
	public static void main(String[] args) {
		
		Demo2 d = new Demo2();
		d.printInfo();
	}
}

运行结果:

来自:Demo2 

抽象类的应用:模板方法模式

模板方法模式定义:

父类抽象(abstract)化定义一系列方法作为模板(不具体),把一些步骤推迟到子类去实现,子类将重写这些方法以提供具体行为。 

意图:

定义了一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模版方法模式让子类不需要改变算法结构

之前做的智能家居可以运行在多个平台上,比如51,32,树莓派,现在就定义在每个平台上完成这个项目的通用模板,然后再在具体平台实现,以51为例子(当然这只是一个类比,java在51单片机上不能运行): 

abstract class Control
{
    abstract void getCommand(); //是概括了在不同平台上完成智能家居项目的模板
    abstract void socketCommand(); //抽象化这些方法,在子类(类比于具体平台)
    abstract void lightControl();  //中再进行具体化
    abstract void cameraControl();

    public void work(){ //控制的基本流程
        getCommand();   //接收指令
        socketCommand(); //来自socket的指令
        lightControl();  //灯的控制
        cameraControl(); //相机的控制
    }
}

class C51platform extends Control //当这个地方出现红色波浪线的时候
{                                 //光标放上去,可以看到解决方法的快捷键	
								  //把抽象方法重写,全部具体实现
    void getCommand() {
        System.out.println("getcommand in 51");
    }

    void socketCommand() {
        System.out.println("socketcommand in 51");
    }

    void lightControl() {
        System.out.println("lightcontrol in 51");
    }

    void cameraControl() {
        System.out.println("cameracontrol in 51");
    }
}

public class Demo {
    public static void main(String[] args) {
        C51platform c51 = new C51platform();  //实例化出一个对象
        c51.work(); //执行具体流程
    }
}

运行结果:

getcommand in 51
socketcommand in 51
lightcontrol in 51
cameracontrol in 51 

二、接口

接口的概念 

接口(Interface),在JAVA中是一个抽象类型,是抽象方法的集合(重点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值