Java面向对象
第四章 抽象类
4.1 抽象类的概念:
编写一一个类时, 为该类定义-些方法, 这些方法用于描述该类的行为方式,这些方法都有具体的方法体,但在某些情况下,某个父类仅知道其子类应该包含哪些方法,却无法准确地知道子类实现这些方法的细节。如定义一个图形类( Shape)作为诸如三角形、菱形以及矩形等图形的父类,在该父类中定义calcPerimeter()方法,该方法用于计算图形的周长,但不同的子类图形计算周长的方式大相径庭,所以导致Shape类的calcPerimeter()方法无法运用某个固定的计算图形周长的公式来计算其子类的周长。
4.1.2 抽象类的作用 :
抽象类不能被实例化,只能作为父类被继承。从语义的角度而言,抽象类是从多个具体类中抽象出来的父类,从多个具有相同特征的类中抽象出一个抽象类,以该抽象类作为其子类的模板,从而避免了子类设计时的随意性。抽象类体现的就是一种模 板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
编写一个抽象父类,父类提供多个子类的通用方法,并且将一一个或多个方法留给其子类实现, 这就是一种模板模式,模板模式是一种常见的设计模式。
4.2 final修饰符
final成员变量
对于final修饰的成员变量而言,- 旦赋初始值就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在构造器中为成员变量指定初始值,那么这些成员变量的值将一直 是系统分配的默认值,这些成员就失去了存在的意义。
final修饰的类属性、实例属性可以指定初始值的部分如下:
(1)类属性:必须在静态初始化块或声明该属性时指定初始值。
(2)实例属性:必须在声明该属性或构造器中指定初始值。
final修饰成员变量的具体操作详见示例4.3。
public class FinalVariable {
//定义成员变量时指定默认值
private final int index=6;
//在构造器中对成员变量赋初始值
private final String language;
//该静态变量在静态代码块中对成员变量赋初始值
private final static int length;
private final int size;
//构造器
public FinalVariable(){
this language='Java语言”,
//final变量一旦赋初值,则不可修改this. language="C语言”:
//静态代码块
static{
length= 100;
}
//在普通方法中为final变量赋值
public void changeFinalVar(){
//不能在普通方法中为final变量赋初值this. size= 10;
}
4.3 接口
接口的定义
与类定义不同,定义一个接口不能使用class 关键字,而是使用interface 关键字。定义接口的基本语法如下:
[访问修饰符]interface 接口名 [extend 父接口1,父接口2, .......]
public interface input{
//定义输出的标准
public abstract void input();
}
本章小结:在学习第一章时主要掌握
1、定义Java中抽象类和抽象方法的关键字是什么?简述Java抽象类和抽象方法是什么?
2、final 修饰符的作用是什么?
3、简述接口的定义和语法。
4、简述抽象类与接口的区别?
实践4.4.2 模拟动物吼叫声
1、创建一个animal包
public interface|animal{
public abstract boid sing();
}
2、在animal中,定义一个dog类与tiger类
public class Dog implements IAnimal{//狗实现吼叫接口
public void sing() {
System. out. printIn("汪汪汪");}
}
public class Tiger implements lAnimal (//老虎实现吼叫接口
public void sing(){
System.out.println("嗷嗷嗷")
}
3、创建business包
public class Business {
//定义了一个lAnimal的接口变量
private lAnimal animal;
public void sing(){animal.sing();
//通过setAnimal()方法,初始化动物对象
public void setAnimal(lAnimal anima |){this.animal = animal;
}
4、执行代码
public class testsing {
public static void main(Stringl] args) {
Business business = new Business();
//business. setAnimal(new Dog());
business.setAnimal(new Tiger());business. sing();
}
}