第九章 接口和抽象类 基本使用

导语:

  • 接口和内部类为我们提供了一种将接口和实现分离的更加结构化的方法。
  • Java关键字这个事实表明人们认为这些思想很重要,以至于要提供对它们的直接支持。

1.抽象类

  • 第八章中的Instrument乐器类中直接调用其方法会出错。因为Instrument的目的是为实现它的子类提供一个通用的接口。
    目的是不同的子类以不同的方式实现此接口。
  • 通用接口建立起一种基本形式,表示所有子类的共同部分。另一种说法是将Instrument类称作抽象基类,简称抽象类。
  • 抽象类的作用:通过抽象类创建的对象几乎没有意义,只是希望通过抽象类这个抽象接口引用操纵一系列类(多态)。
  • 注意:1.调用所有抽象类中的方法编译器都会报错。
    2.如果一个类包含抽象方法,那么它必须被声明为抽象类 关键字abstract。
    3.如果创建抽象类的对象时,编译器会报错,编译器会确保抽象类的纯粹性。
  • 创建使用抽象类:继承一个抽象类,必须实现其中所有的抽象方法。如果不这样做,那么导出类也是抽象类,并且编译器将会强制用abstract关键字来限定这个类。
  • 抽象类的优点:抽象类可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们,抽象类是很有用的重构工具,使我们可以很容易的将公共方法沿继承层次结构向上移动。
  • 代码提供:

    package com.yue.abs;
    
    abstract class Instrument {
    	abstract void play(String n);
    	// 非抽象方法
    	private String what() {return "Instrument";}
    	abstract void adjust();
    }
    
    class Wind extends Instrument {
    	void play(String n) {System.out.println("Wind" + n);}
    	void adjust() {}
    }
    
    // 没实现完抽象父类中的方法
    abstract class Percussion extends Instrument {
    	// 实现其中的一个
    	void play(String n) {
    		System.out.println("Percussion" + n);
    	}
    	// 没实现这个方法,虽然这个adjust和父类Instrument中的一样,但这个方法是Percussion的抽象方法
    	abstract void adjust();
    	// 这个抽象类还可以定义其他抽象的方法
    	abstract void next();
    }
    
    class Brass extends Wind {
    }
    
    public class Music {
    	public static void main(String[] args) {
    		// 声明一个Instrument,这样会报错
    		// Instrument instrument = new Instrument();
    		// 不过可以这样
    		Instrument inside = new Instrument() {
    			void play(String n) {
    				System.out.println("内部定义:" + n);
    			}
    
    			void adjust() {
    			}
    		};
    		// 调用
    		Instrument[] orchestra = { inside, new Wind(), new Brass() // 因为这个是个空类,没有重写父类方法,他就只能执行父类中的方法了。
    		};
    		for (Instrument i : orchestra) {
    			i.play("呵呵:");
    		}
    	}
    }
    

2.接口

  • 接口关键字使抽象的概念更向前迈了一步
  • interface关键字产生了一个完全抽象的类,其中的方法声明没有任何具体的实现,仅仅是声明而已,抽象类可以有部分方法实现。
  • 一个接口表示:“所有实现了该特定接口的类看起来都像这样”。
  • java是单一继承的,而接口的产生就可以实现多重继承了,可以向上转型(子类有父类的引用)为多种父类的类型。
  • 接口中的域(字段等)都隐式的声明为static和final的,并且是public的。接口中的方法也都必须是public的,否则编译器会报错。
  • 实现接口,需要使用implements关键字,表示“interface”只是它的表象。
  • 代码:

    interface Instrument{
    	int i = 0;//接口中的域 static&final
    	void play (String n);
    	public void adjust();
    }
    //接口也可以继承接口而不必实现其中的方法,但不能使用implements关键字
    interface Insturment2 extends Instrument{
    	//但父接口(Instrument)的方法并没有被重写,虽然是一样的,这个play仅属于Insturment2
    	public void play(String n);
    }
    class Wind implements Instrument{
    	public void play(String n) {System.out.println("Wind" + n);}
    	public void adjust() {}
    }
    class Percussion implements Instrument{
    	public void play(String n) {System.out.println("Percussion" + n);}
    	public void adjust() {}
    }
    public class Music {
    	public static void main(String[] args) {
    		Instrument instrument = new Instrument() {
    			public void play(String n) {System.out.println("内部实现:" + n);}
    			public void adjust() {}
    		};
    		Instrument[] orchestra = {
    			new Wind(),new Percussion(),instrument
    		};
    //		Instrument.i ++;//因为是final的这样是错误的调用,因为是静态、public,可以Instrument.i
    	}
    }
    
时间: 2024-07-29 11:20:48

第九章 接口和抽象类 基本使用的相关文章

Java编程思想---第九章 接口(上)

第九章 接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 9.1 抽象类和抽象方法 Java提供一个叫做抽象方法的机制,这个机制是不完整的,仅有声明而没有方法体,抽象方法的语法如下: abstract void f(); 包含抽象方法的类叫做抽象类,如果一个类包含一个或者多个抽象方法,该类必须被限定为抽象的,否则编译器就会报错. 如果一个抽象类不完整,那么当我们试图产生该类的对象时,由于抽象类创建对象时不安全的,所以我们会从编译器那里得到一条出错消息,这样编译器会确保抽象类

第九章 接口

interface 接口 关键词 1. 是为了让没有继承关系的类,也有继承行为 2. 接口是一种引用数据类型数据类型 3. 属性--只能是公共的静态常量属性,就算不写,public ,static final 也不能改变这一点 a. public static final int A : 4. 构造 -- 接口不能有构造 --说明接口产生对象 5. 行为 --只能是公共的抽象方法--就算不写abstract/public关键字,也是如此 6. 接口的使用方法 a. 让类去实现接口 b. 实现接口

自学java 第九章接口

今天学习了接口. 首先和接口相似的是抽象类.只要含有抽象方法就必须定义为抽象类,但抽象类中不一定必须有抽象方法. 若继承一个抽象类,则导出类必须实现该抽象类的全部抽象方法,否则导出类也必须定义为抽象类. 接口可以说是一个完全抽象的类,它内部定义的方法都是抽象方法. interface关键字前可以加public关键字(但仅限于该接口在与其同名的文件夹中被定义),否则就是有包访问权限.由于接口中的方法都是隐式的public型的(即不能用private 或protected,否则编译报错),因此实现接

JAVA-初步认识-第九章-接口-细节

一. 继承和接口的共同使用 接口的功能远不止与此(这里是指多实现,可以让子类具备n多功能),还有其他功能. 截图中的功能没有任何问题,之前多实现是在给子类增加多个功能.这里意味着先给起找一个父类继承,再去给它扩展功能. 对class Test2 extends Q implements A, Z这句话进行解析:Test2这个类继承Q就意味着,给Test2给它找了一个爹,找了一个组织.因为它一继承Q,它就具备了里面的所有内容,它能做继承,就是说它是Q的一种.现在问题来了,以及继承了,干嘛还要多实现

JAVA-初步认识-第九章-接口-特点

一. 举例来说明截图中,有关于接口的知识点.早期的电脑,功能都是封死的,而且没有鼠标,只有触摸板.后来要想添加鼠标,就必须拆开电脑,把鼠标线焊死在电脑里,但是带来一个问题.电脑搬到哪里,鼠标就要到哪里,这很麻烦.用户的鼠标千变万化,都焊死在里面不合适. 为了解决这个问题,厂家在电脑上设置了一个插口,便于给鼠标线进行安装.这里的插口就是接口.在java中,interface就是接口,接口的概念非常大.凡是对外暴露的就是接口. 接口可以作为一中设计规则,在很多方面运用到它. 在开发的时候,要留有接口

[Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式在内存中存放对象: (1)为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈或者静态存储区域内来实现.这种方式牺牲了灵活性. (2)在被称为堆的内存池中动态地创建对象.在这种方式,知道运行时才知道对象需要多少对象,它们的生命周期如何,以及它们的具体类型.

第10章 接口、继承与多态 抽象类和接口

一.抽象类 在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理.回想继承和多态原理,继承树中越是在上方的类越抽象,如:鸽子类继承鸟类.鸟类继承动物类等.在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图像,但它的子类却可以. 抽象类的语法如下:使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除

第九章:IO流

第九章:IO流 File类 java.io.File类:表示文件或目录.常用方法:getName()getPath()getAbsolutePath()length()isFile()isDirectory()listFiles()mkdir()/mkdirs()createNewFile().... 流的原理和分类 按照方向分:输入流和输出流 按照读写单位:字节流和字符流 按照功能:节点流和处理列 字节输入流和字节输出流(节点流) 字节输入:InputStream InputStream抽象类

C#OOP之八 继承 接口和抽象类

继承 在现实生活中有所谓的"种瓜得瓜.种豆得豆"的说法,在生物学概念上就是"遗传"的概念,在面向对象中"继承"就类似于生物学中的遗传,通过继承,可以更好的实现代码的重用(复用,多次使用的意思).增加扩展性.简化代码等. 下面是现实生活中的引用: 定义与使用继承 继承一次最常用的就是通过合法程序(比如遗嘱)从别人那里接受财产或爵位等,有点类似于世袭制. 另外一个含义,是人从父母那里继承一些特征,如果孩子从父母继承的身高.相貌等特征.那么在什么情况下