java中的抽象类
2016-03-27 11:30
337 查看
<1>定义:只有函数的定义没有函数体的函数称为抽象函数
使用abstract定义的类称为抽象类
<2>基本语法:
第一条: 抽象类不能够生成对象(即不能new),它天生就是来作为父类的,可以被继承,其子类可以生成对象。
第二条:如果一个类中包含抽象函数,那么这个类必须被声明为抽象类.
第三条:如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类
<3>需注意:
当一个子类继承自抽象类时,需执行以下两种方法之一:
1.把该子类加上abstract,作为抽象类
2,复写父本的抽象方法(常用这种方法)
<4> 抽象类可以用构造函数
抽象类不能生成对象,
构造函数用于生成对象,
但抽象类可以有构造函数,其子类可以用super(参数)来调用
例子如下:
3个类,抽象父类:Person , 子类:Chinese ,测试类Test.
//定义一个抽象类Person
abstract class Person{
//成员变量
String name;
int age;
//抽象类可以有构造函数
Person(){
System.out.println("Person的无参数构造函数");
}
Person(String name , int age){
this.name = name;
this.age = age;
}
//抽象方法
abstract void eat();
}
//定义一个子类来继承抽象父类Person
//当继承一个抽象类时:要么把该子类也定义为抽象,要么复写父类的抽象方法,不然会报错
//第一种:只需加abstract,此处用第二种
class Chinese extends Person{
//增加一个成员变量
String address;
//Chinese的构造函数
Chinese(){
super();
System.out.println("Chinese的无参数构造函数");
}
Chinese(String name , int age , String address){
super(name , age );
this.address = address;
System.out.println("我叫" + name + ", 今年" + age + "岁,家住在" + address );
}
//复写父类的抽象方法
void eat(){
System.out.println("我习惯用筷子吃饭");
}
}
//测试函数
class Test{
public static void main(String args [] ){
//(1)Person是抽象类,抽象是无法new实例的
//Person p = new Person();(错)
/*
(2)若用,abstract 来抽象化子类Chinese,当使用以下代码时会报错:Chinese是抽象的,无法实例化
Chinese c = new Chinese();
c.name = "张三";
c.age = 18;
c.eat();
*/
Chinese s = new Chinese();
s.name = "张三";
s.age = 18;
s.address = "广州";
s.eat();
}
}
结果:
Person的无参数构造函数
Chinese的无参数构造函数
我习惯用筷子吃饭
使用abstract定义的类称为抽象类
<2>基本语法:
第一条: 抽象类不能够生成对象(即不能new),它天生就是来作为父类的,可以被继承,其子类可以生成对象。
第二条:如果一个类中包含抽象函数,那么这个类必须被声明为抽象类.
第三条:如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类
<3>需注意:
当一个子类继承自抽象类时,需执行以下两种方法之一:
1.把该子类加上abstract,作为抽象类
2,复写父本的抽象方法(常用这种方法)
<4> 抽象类可以用构造函数
抽象类不能生成对象,
构造函数用于生成对象,
但抽象类可以有构造函数,其子类可以用super(参数)来调用
例子如下:
3个类,抽象父类:Person , 子类:Chinese ,测试类Test.
//定义一个抽象类Person
abstract class Person{
//成员变量
String name;
int age;
//抽象类可以有构造函数
Person(){
System.out.println("Person的无参数构造函数");
}
Person(String name , int age){
this.name = name;
this.age = age;
}
//抽象方法
abstract void eat();
}
//定义一个子类来继承抽象父类Person
//当继承一个抽象类时:要么把该子类也定义为抽象,要么复写父类的抽象方法,不然会报错
//第一种:只需加abstract,此处用第二种
class Chinese extends Person{
//增加一个成员变量
String address;
//Chinese的构造函数
Chinese(){
super();
System.out.println("Chinese的无参数构造函数");
}
Chinese(String name , int age , String address){
super(name , age );
this.address = address;
System.out.println("我叫" + name + ", 今年" + age + "岁,家住在" + address );
}
//复写父类的抽象方法
void eat(){
System.out.println("我习惯用筷子吃饭");
}
}
//测试函数
class Test{
public static void main(String args [] ){
//(1)Person是抽象类,抽象是无法new实例的
//Person p = new Person();(错)
/*
(2)若用,abstract 来抽象化子类Chinese,当使用以下代码时会报错:Chinese是抽象的,无法实例化
Chinese c = new Chinese();
c.name = "张三";
c.age = 18;
c.eat();
*/
Chinese s = new Chinese();
s.name = "张三";
s.age = 18;
s.address = "广州";
s.eat();
}
}
结果:
Person的无参数构造函数
Chinese的无参数构造函数
我习惯用筷子吃饭
相关文章推荐
- Java中对象的引用传值
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- 注解_Annotation_内置注解_自定义注解_反射机制读取注解JAVA208-210
- Spring中的一个错误:使用Resources时报错(The annotation @Resources is disallowed for this location)
- 用Java写解谜Rpg-1.我理解的MVC与课设
- Java的进程与线程
- 迭代器模式和java集合Collection(一)ArrayList
- Java学习笔记之使用反射+泛型构建通用DAO
- java的回收机制----根搜索算法
- 常用排序算法
- 在Eclipse中使用git把项目导入到osc@git中
- java学习之实验二
- 详解Java实现多线程的三种方式
- java中的反射
- 【JAVA设计模式】简单工厂模式(Simple Factory Pattern)
- JavaEE初学者
- java中HashMap详解
- welogic不能启动主服务器,出现 java.lang.NumberFormatException: null错误
- Maven生成可以直接运行的jar包的三种方式