java抽象类和接口
Posted 薄灬荷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java抽象类和接口相关的知识,希望对你有一定的参考价值。
类——客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议)。把客观世界中的事物映射到面向对象的程序设计中就是对象。将同一类别的对象归纳总结,就构成类。包括属性和方法、构造属性:记录事物的特征(状态)方法:记录了事物的行为;
例如:学生
特征:学号、性别、姓名、年龄
行为:学习、吃饭
public class Student {
int id;
String name;
int age=20;
String sex;
public void study(String st){
System.out.println(name+"学习了"+st);
}
public String eat(){
return "ok";
}
public Student(){}
public Student(int id,String name,int age,String sex){
this.id=id;
This.name=name;
This.age=age;
this.sex=sex;
}
抽象方法:仅有定义,没有具体实现的方法体
抽象类:含有抽象方法的类,
抽象类有构造,但是无法调用构造,
抽象类中没有对象,抽象方法不能执行,
抽象类的引用,指向非抽象的子类对象(多态),
抽象方法的调用其实是调用重写以后的非抽象方法,
含有抽象方法的类一定是抽象类,当时抽象类中不一定有抽象方法。
抽象类不能被实例化,也就是说,不能有自己的对象
例如:
一个银行系统中的账户,包括定期账户和活期账户,定期账户和活期账户都是基本的账户,
但是它们计算利息的方法不同,需要不同的实现方法,可以将基本账户定义为抽象类
public abstract class Acount {
//基本账户
private double total=2000;
public Acount(){}
//抽象方法具有强制性、规范性
public abstract double get();
//抽象方法
public void setTotal(double total) {
this.total = total;
}
public double getTotal() {
return total;
}
}
public class HAcount extends Acount {
//活期账户
public double get() {
return this.getTotal()*0.02;
}
public static void main(String[] args){
Acount a=new HAcount();
System.out.println(a.get());
}
}
public class StaticAcount extends Acount{
//定期账户
public double get(){
return this.getTotal()*0.03;
}
public static void main(String[] args){
Acount a=new StaticAcount();
//抽象类的引用指向非抽象子类对象
System.out.println(a.get());
//抽象方法的调用其实是调用子类重写以后的非抽象方法
}
}
声明接口使用关键字“interface”
接口中一般只包含一组
public抽象方法(且必须是公有抽象方法,但方法定义中public abstract可省略),因此可以将接口看成特殊的抽象类,接口也可以包含public static final数据(一般不写)
Java一个类只能直接继承(extends)另一个类,不允许一个子类继承多个超类,却允许一个子类继承一个超类并实现(implements)多个接口
强制类型转换成接口时,不检测继承关系,但是如果类型不匹配,会在运行时引发类型转异常。
例如:
黄金:
黄金是一种货币
黄金也是一种金属
public interface Jinshu { //定义黄金是金属的接口
/* private */int i=8; //public static final 常量
void shine();
}
public interface Huobi {
//定义黄金是货币的接口
void change();
}
public class Gold implements Huobi,Jinshu{
public void shine(){
System.out.println("黄金闪闪发光!");
}
public void change(){
System.out.println("黄金可以交换!");
}
public static void main(String[] args){
Jinshu js=new Gold();
js.shine();
Huobi hb=new Gold();
hb.change();
System.out.println(js.i);
}
}
类、抽象类、接口之间的联系,可以举例如下:
一个公司,有老板,老板聘的经理,还有员工,
类就是员工,抽象类就是经理,接口就是老板。
接口里就是给个方法,
但是他自己不做,
比如老板说我要那个文件,
给我定个机票,
我要那个策划方案等,都是下面人做。老板只说不做。
抽象类给的方法,
有的他自己做,
有的其他人做。
比如经理说我要那个文档,
员工就要发给他,但是他自己也要做点事,比如拿方案给老板看。经理又说又做。
一般类给的方法,就是什么都要做,都要实现。
抽象类和接口之间的区别和联系:
两者都是抽象类,都不能实例化
Interface实现类和abstract的子类都必须实现已经声明的抽象方法区别:
一个类只能继承一个抽象类,但是一个类可以实现多个接口
Interface强调的是功能的实现,而abstract class强调的是所属关系
Interface中的方法都是抽象方法,没有方法体,它的实现类中必须包含实现接口的实现方法,而abstract class的子类中可以有选择的实现抽象方法
Interface是完全抽象的,接口中只能声明方法,且必须是用public abstract,不能是private及protected,interface没有方法体,而abstract class 中可以有非抽象方法,
接口中定义的变量是public static final类型,且必须有初值,实现类中不能重新定义或改变,而抽象类中的变量可以重新定义,可以重新赋值。
举例:
门的动作可以定义开和关两个动作,同时门还可以实现报警的功能
abstract class Door{
abstract void open();
abstract void close();
}
interface Alarm{
void alarm();
}
以上是关于java抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章