2021-06-22

第四章 抽象类

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值