0
点赞
收藏
分享

微信扫一扫

Java面向对象之抽象方法抽象类、接口的使用


一、抽象

1、简单说明

  • 只是声明,并不去实现
  • 抽象方法:​​public abstract void act();​​,没有方法体,直接结束,抽象方法只能存在于抽象类中。
  • 抽象类:​​public abstract class Test{}​​,继承抽象类的子类必须重写父类中的方法(包括抽象方法),否则子类也必须是抽象类。

2、注意事项
(1)可以用于强制要求子类中必须有哪些方法,因为必须重写抽象父类的方法。
(2)抽象类不能实例化其他类的对象。
(3)不过,抽象类中可以有正常的方法,不一定都是抽象方法。

3、测试练习

  • 在抽象类中实例化对象报错:
  • Java面向对象之抽象方法抽象类、接口的使用_面向对象编程

  • 在继承了抽象类的普通子类中实例化对象不会报错:

abstract class Test06_Father{  //定义一个抽象类 
//final常量
final int height = 180;

//在抽象类中定义抽象方法(抽象方法只能存在于抽象类中)
public abstract void act0();
//在抽象类中定义普通方法
public void act1(){}
public void act2(){}

//在抽象类中实例化对象:会报错
// Test06_Father tf = new Test06_Father();
}

public class Test06_Son extends Test06_Father{ //子类继承一个抽象类
//在继承了抽象类的子类中必须重写的父类方法
public void act0(){
System.out.println("第零次重写抽象方法……");
}
public void act1(){
System.out.println("第一次重写普通方法……");
}
public void act2(){
System.out.println("第二次重写普通方法……");
}

//在继承了抽象类的子类中定义正常执行的方法
public void speeking(){
System.out.println("我是不会变心的!!!");
}

//在子类中定义主方法
public static void main(String[] args){
//重新定义变量可以
int height = 99;

//在继承了抽象类的普通子类中实例化对象:不会报错
Test06_Son ts = new Test06_Son();
ts.act0();
ts.act1();
ts.act2();
ts.speeking(); //调用对象中的方法
}
}

Java面向对象之抽象方法抽象类、接口的使用_mvc_02

二、接口

1、简单说明

  • 接口实际上是一种特殊的抽象类,里面所有内容都是公开的。
  • 接口中所有的方法都是抽象方法(不可以有普通的方法),就相当于用抽象方法占个位。
  • 使用interface来声明一个接口,在接口中定义抽象方法时可以不使用abstract。

2、注意事项
(1)接口中定义的属性必须是public static final的,而接口中定义的方法则
必须是public abstract的,因此这些修饰符可以部分或全部省略;

(2)接口中定义的属性的值在实现类中不能被更改;

(3)一个类只能实现某个接口,不能继承某个接口;但接口可以继承接口
接口不但可以继承接口,而且可以继承多个接口,即接口允许多继承;

(4)如果一个类只重写(实现)了一个接口的部分方法,则该类必须的声明为抽象类,否则就必须重写(实现)继承的接口中所有的抽象方法;

(5)一个类可以在继承一个父类的同时实现一个或多个接口,但extends关键字必须的在implements(实现)之前;

(6)不可以new接口对象,但可以定义–个接口引用类型的变量并将其指向
实现接口的对象,达到多态的目的。

3、测试练习

interface Test06_Valuable{  //定义一个接口(特殊类)
//在接口中定义抽象方法:不需要使用abstract
void getMoney();
}
class Test06_Gold implements Test06_Valuable{ //继承(实现)了接口的一个接口
//在继承了接口的接口中必须重写(实现)父类的抽象方法(加个public提高访问权限)
public void getMoney(){
System.out.println("是金子总是值钱的!");
}
}
public class Test06_Son{ //定义主方法的类
public static void main(String[] args){
Test06_Gold go = new Test06_Gold(); //实例化子接口对象
go.getMoney(); //调用子接口对象中的方法

//接口同样具有多态性
Test06_Valuable tv = new Test06_Gold(); //向上赋值
tv.getMoney();
}
}

Java面向对象之抽象方法抽象类、接口的使用_程序设计_03


举报

相关推荐

0 条评论