码迷,mamicode.com
首页 > 编程语言 > 详细

java基础()之抽象类和抽象函数

时间:2019-11-09 00:26:14      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:extend   pst   构造函数   test   开发   using   strong   为什么   修改   

 

1、抽象函数的语法特征
2、抽象类的语法特征
3、抽象类的作用

抽象函数

只有函数的定义,没有函数体的函数被称为抽象函数;

abstract void func();

  

抽象类

使用abstract定义的类称为抽象类。

abstract class Person{}

  

注意:
1、抽象类不能够生成对象;
2、如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类。
3、如果一个类当中没有抽象函数,这个类也可以被声明为抽象类。

 

下面来用一个例子说明下:

Person.java:

abstract class Person{
	String name;
	int age;
	
	void intruduce(){
		System.out.println("My name is" + name + ",my age is " + age);
	}
	abstract void eat();
	
}

  

Chinese.java
class Chinese extends Person{
	void eat(){
		System.out.println("use chopsticks.");
	}
}

  

Test.java:

public class Test{
	public static void main(String[] args){
		Person p = new Chinese();
		p.eat();
	
	}
}

  

输出结果:

PS C:\Users\admin\Desktop\java_code\练习八> java Test
use chopsticks.

  

抽象类可以有构造函数

 Person.java

abstract class Person{
	String name;
	int age;
	Person(){
		System.out.println("Person");
	}
	void intruduce(){
		System.out.println("My name is" + name + ",my age is " + age);
	}
	abstract void eat();
	
}

  

Chinese.java

class Chinese extends Person{
	Chinese(){
		System.out.println("Chinese");
	}
	void eat(){
		System.out.println("use chopsticks.");
	}
}

  

输出结果:

PS C:\Users\admin\Desktop\java_code\练习八> java Test
Person
Chinese
use chopsticks.

  

这是因为会自动加上super();

class Chinese extends Person{
	Chinese(){
		super();
		System.out.println("Chinese");
	}
	void eat(){
		System.out.println("use chopsticks.");
	}
}

  

 那么为什么要使用抽象类呢?

可以使语义和语法的错误达成统一。

 

class Printer{
	void open(){
		System.out.println("open");
	}
	void close(){
		System.out.println("close");
	}
	void print(){
	}
	
}

  

class HPPrinter extends Printer{
	void print(){
		System.out.println("Using HPPrinter.");
	}
	
}

  

class CanonPrinter extends Printer{
	void print(){
		System.out.println("Using CanonPrinter.");
	}
}

  



PS D:\Java\code\练习七> java Test
open
Using HPPrinter.
close
open
Using CanonPrinter.
close

  

 这样写是没问题的,但是如果开发者不是一个人的话,那么就会产生一个问题,在子类中没有复写函数的话,编译器并不会报错。因此修改

abstract class Printer{
	void open(){
		System.out.println("open");
	}
	void close(){
		System.out.println("close");
	}
	abstract void print();
	
}

  

  

如果子类中没有复写函数的话,就会报如下的错误:

PS D:\Java\code\练习七> javac .\Test.java
.\HPPrinter.java:1: 错误: HPPrinter不是抽象的, 并且未覆盖Printer中的抽象方法print()
class HPPrinter extends Printer{
^
1 个错误

  

 

 

java基础()之抽象类和抽象函数

标签:extend   pst   构造函数   test   开发   using   strong   为什么   修改   

原文地址:https://www.cnblogs.com/endust/p/11823298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!