您的位置 首页 java

Java笔记抽象类和接口

Java笔记 抽象类 和接口

一、抽象方法

1.、概念

只有方法声明,没有方法体的方法就是抽象方法。

抽象方法必须使用abstract关键字修饰

2、格式

修饰符 abstract 返回值类型 方法名(参数列表);

二、抽象类

1、 概念

被abstract修饰的类就是一个抽象类。

具有抽象方法的类就必须是一个抽象类。

2、 格式

public abstract class 类名{

}

3、作用

用来描述一种数据类型应该具备的基本特征和行为,如何实现该行为由子类通过方法重写完成。

4、特点

抽象类和抽象方法都必须使用abstract关键字修饰。

抽象类不能直接创建对象。原因:调用抽象方法没有任何意义。

子类继承抽象类之后,必须重写全部所有的抽象方法,否则该子类也必须定义为抽象类。

三、抽象类常见的问题

1.、抽象类不能创建对象,那么抽象类有没有 构造方法 呢?如果有?构造方法有什么意义?

可以有构造方法,抽象类的构造方法可以被子类调用传递参数值给父类,为父类的成员变量赋值。

2.、抽象类能不能不定义抽象方法?

可以不定义抽象方法。在适配器模式会使用到。

3.、抽象类可以定义普通方法吗?(有方法体的方法)

可以

4.、抽象类一定是父类吗?

一定

5.、抽象关键字不能和哪个关键字共存?

abstract不能和 private 一起使用,因为private修饰的方法不能被子类重写,而abstract方法要求必须被子类重写,相互矛盾。

四、接口

1、概念

接口也是一种引用数据类型,是比抽象类还要抽象的”类”。

接口就是功能(方法)的集合,只描述功能所具备的方法,如何实现方法由实现类(接口的子类)通过方法重写完成。

2、定义格式

public interface接口名{

// 抽象方法1

// 抽象方法2

…….

// 抽象方法n

}

接口名和类名的命名规则一致。

3、使用格式

public class 类名 implements 接口名{

}

比如:public class Manager implements Driverable{

// 重写接口中的所有方法

}

4、接口的特点

接口不能定义构造方法,不能创建对象。

接口中定义的成员变量是常量,一旦赋值不能再修改。

JDK1.8(包括1.8)之后,接口中可以定义有方法体的方法

JDK1.8之前,接口中所有方法都是抽象方法。

接口中的成员都有默认的修饰符

成员变量:public static final

成员方法:public abstract

5、接口注意事项

一个类在继承一个类的同时可以实现多个接口。

接口可以继承接口,而且可以多继承。

类实现接口时,必须重写所有接口中的抽象方法,否则该类必须定义为抽象类。

接口和抽象类中可以有方法声明一样的方法,子类在继承抽象类和实现接口时只需要重写一个即可。

6、接口和抽象类的区别(面试题)

相同点

都不能创建对象。

都可以定义抽象方法。

不同点

抽象类可以有成员变量,接口中的常用变量是常量。

抽象类成员变量和成员方法没有默认的修饰符,接口中的成员有默认的修饰符。比如常量默认修饰符:public static final 方法默认修饰符:public abstract

抽象类可以有构造方法,接口没有构造方法

抽象类只能单继承,接口可以多继承。

抽象类中可以有普通方法,接口在JDK1.8之前不能有普通方法,1.8之后可以有。

7、如何选择接口和抽象类

明确该方法是否是某种数据类型的共性内容。

如果是共性内容,该方法就应该放到该中类型的父类中。然后再考虑该方法父类知不道如何实现,如果父类不知道如何实现并且要求子类必须重写的,则将该方法定义为抽象方法,则该父类就必须定义为抽象类。

如果不是共性内容,该方法就应该定义到接口中,然后需要该功能的类实现接口重写方法即可。

五、 多态

1、概念

多态是面向对象的三大特征之一。

同一种事物表现出来的多种形态就称为多态。

2、前提条件

必须要有子父类关系或类实现接口的关系。

必须有方法重写

必须有父类引用指向子类对象。

3、多态的格式

父类类名 变量名 = new 子类类名(); 或

接口名 变量名 = new 接口实现类();

比如:

动物类:Animal

abstract class Animal {

public abstract void eat();

}

子类:Dog

class Dog extends Animal {

public void eat(){

syso(“狗吃骨头”);

}

}

// 创建狗对象

Animal d = new Dog();

4、多态的注意事项

多态情况下,子父类出现同名的成员变量时,通过父类引用访问时访问的是父类的成员变量。

多态情况下,子父类出现同名的成员方法时,通过父类引用调用成员方法时调用子类重写后的方法。

成员变量属于静态绑定

在程序运行之前就确定了访问的成员变量是哪个对象的。

成员方法动态绑定

在程序运行过程中才去确定调用哪个对象的,如果子类重写了,则调用子类的,否则调用父类的。

成员变量:编译看左边,运行看左边

成员方法:编译看左边,运行看右边

5、多态的好处和弊端

弊端:多态情况下,不能使用子类特有的成员。

优点

提高了代码的扩展性。

提高了代码的复用性。

提高了代码的维护性。

6、多态的使用场景

作为 形式参数

多态情况下,父类或接口类型作为形式参数可以接收更多的数据类型对象。

作为返回值类型

多态情况下,父类或接口类型作为返回值类型可以返回更多数据类型的对象。

7、多态的转型

向上转型:父类引用指向子类对象的过程就是向上转型的结果。

格式:Animal d = new Dog(); 将子类类型看成父类类型。

向下转型:将父类引用转换为子类引用的过程就是向下转型。

数据类型强制转换格式:小数据类型 变量名 = (小数据类型)大数据类型的变量名;

long b = 100l; int a = (int)b;

向下转型格式:子类类名 变量名 = (子类类名)父类引用变量名;

8、 instanceof 关键字

作用:用来判断父类引用指定的到底是哪一个子类类型的对象。

格式:boolean b = 变量名 instanceof 类名或接口名;

注意:如果instanceof右边的是类名,则要求对象名和类名之间是子父类关系。

文章来源:智云一二三科技

文章标题:Java笔记抽象类和接口

文章地址:https://www.zhihuclub.com/192004.shtml

关于作者: 智云科技

热门文章

网站地图