抽象类与接口

1.抽象类的基本概念:

用abstract关键字声明的类叫抽象类,用来专门当做父类

抽象类的定义规则如下:

(1)抽象类和抽象方法都必须用abstract关键字来修饰

(2)抽象类不能被直接实例化,也就是不能直接用new关键字去产生对象

(3)抽象方法只需声明,而不需实现

(4)含有抽象方法的类必须声明为抽象类,抽象类的子类必须覆写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。

注意:在抽象类中定义的方法有两种,一种是一般的成员方法,另一种是抽象方法,以abstract关键字修饰,该方法没有方法体。格式如下:

abstract   返回值的数据类型    方法名称   (参数...);

public class Test {
public static void main(String[] args) {
Student st=new Student("张三", 25, "学生");
System.out.println(st.talk());
}
}
abstract class Person{
String name;
int age;
String occupation;
//声明一抽象方法talk()
public abstract String talk();
}
class Student extends Person
{
public Student(String name,int age,String occupation) {
this.name=name;
this.age=age;
this.occupation=occupation;
}


@Override
public String talk() {
return "学生姓名:"+this.name+" 年龄:"+this.age+" 职业:"+this.occupation;
}
}//返回结果:学生姓名:张三 年龄:25 职业:学生

2.接口的基本概念:

接口(interface)可以认为是一个特殊的抽象类,它的结构与Java中的抽象类非常相似,也具有数据成员与抽象方法,是Java所提供的一种重要技术。

它与抽象类不点有以下几种:

(1).接口中的数据成员必须初始化,且数据成员均为常量。

(2).接口里的方法必须全部声明为abstract。换而言之,接口不能像抽象类一样保留一般的方法。

(3).接口中的成员都是public的,接口中的final与抽象方法声明的abstract都是可以省略的,例如:
public class Test {
public static void main(String[] args) {
Student s=new Student();
System.out.println(s.talk());
}
}


interface Person {
String name = "张三";
int age = 25;
String occupation = "学生";


// 声明一抽象方法talk();
public abstract String talk();
}


// Student类实现自Person类
class Student implements Person {


// 覆写talk()方法
@Override
public String talk() {
return "学生姓名: " + this.name + " 年龄" + this.age + " 职业:"
+ this.occupation;
}
}//得到结果:学生姓名: 张三 年龄25 职业:学生

什么是模板方法?

在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。

public class Test {
public static void main(String[] args) {
Wangwu s1=new Wangwu();
s1.smoke();
}
}


abstract class Student {
abstract void study();
}


// Smoking不是共性行为,单独抽取出来,体系以外的功能扩展,扩展功能定义在接口中。
interface Smoking {
void smoke();
}


class ZhangSan extends Student {
@Override
void study() {
System.out.println("张三在学习");
}
}


class Wangwu extends Student implements Smoking {


@Override
public void smoke() {
System.out.println("wangwu在抽烟");
}


@Override
void study() {
System.out.println("wangwu在学习");
}
}//打印结果:wangwu在抽烟

JAVA只支持单继承,但在接口中,可以对一个类有多种实现,增强了程序的可扩展性!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值