老生常谈——抽象类和接口异同
2016-09-30 14:53
369 查看
今天是在这个公司的最后一天,外面下着雨,跟我心情一样!虽然不是什么大公司,但是跟同事的感情还是不错的。革命尚未成功,同志仍需努力!未来的路还很长,所以时刻准备着迎接新的挑战!为了我所心爱的人,不断努力,不断奋斗,永不停息前进的脚步!
因为交接工作基本完成,所以这几天一直在等放假!闲来无事,就看看java基础。看到抽象类和接口的知识点时,突然想起自己当年在面试过程中遇到过。细细想想有些问题模糊不清,所以根据俄自己的理解,写了个关于抽象类和接口的比较的例子。希望能对初学者有些帮助。由于本人能力有限,写的不足之处希望大家能够谅解!嘿嘿!有点扯多了,书归正传!
1、抽象类(abstract class)
抽象类和抽象方法都是由abstract进行修饰的。
抽象类不能够进行实例化。
抽象方法只能声明,不能进行实现。也就是说没有方法体。
含有抽象方法的类必须是抽象类。
继承抽象类的子类,必须实现所有抽象类中的方法,否则这个子类依然是抽象类。
2、接口(interface)
所有方法都是抽象的。只能声明,不能进行实现。
所有变量都是常量。
值得注意的是,有些面试的时候会出一些挑错的题。由于在学习时,忽略了一些不常用的知识点,所以在笔试的时候一定要注意细节,接口中是可以声明变量的,但是必须给这个变量赋值。同时,抽象类是可以存在一般方法的,也可以声明成员变量。继承抽象类,除了抽象方法必须重写之外,也可以对父类中的一般方法进行重写。
3、例子
Person抽象类:
医生子类Doctor:
测试类:
然后添加一个Profession接口。同时,Doctor类实现这个接口,并继承Person抽象类。
Profession接口:
Doctor类:
在测试类中增加一行代码:
运行之后的结果就可以看到:
本篇博文内容比较基础,希望大家多多包涵!
因为交接工作基本完成,所以这几天一直在等放假!闲来无事,就看看java基础。看到抽象类和接口的知识点时,突然想起自己当年在面试过程中遇到过。细细想想有些问题模糊不清,所以根据俄自己的理解,写了个关于抽象类和接口的比较的例子。希望能对初学者有些帮助。由于本人能力有限,写的不足之处希望大家能够谅解!嘿嘿!有点扯多了,书归正传!
1、抽象类(abstract class)
抽象类和抽象方法都是由abstract进行修饰的。
抽象类不能够进行实例化。
抽象方法只能声明,不能进行实现。也就是说没有方法体。
含有抽象方法的类必须是抽象类。
继承抽象类的子类,必须实现所有抽象类中的方法,否则这个子类依然是抽象类。
2、接口(interface)
所有方法都是抽象的。只能声明,不能进行实现。
所有变量都是常量。
值得注意的是,有些面试的时候会出一些挑错的题。由于在学习时,忽略了一些不常用的知识点,所以在笔试的时候一定要注意细节,接口中是可以声明变量的,但是必须给这个变量赋值。同时,抽象类是可以存在一般方法的,也可以声明成员变量。继承抽象类,除了抽象方法必须重写之外,也可以对父类中的一般方法进行重写。
3、例子
Person抽象类:
package com.alex.test; /** * 抽象类 * @author Alex */ public abstract class Person { public String name; public int age; //设置信息的方法,定义为抽象方法,抽象方法必须在子类中进行实现 public abstract void setInfo(String name,int age); //定义了一个一般方法 public void getInfo() { System.out.println("名字是:" + this.name); System.out.println("年龄是:" + this.age); } }
医生子类Doctor:
package com.alex.test; /** * 医生子类类 * @author Alex */ public class Doctor extends Person { /** * 实现setInfo方法,这个是Person抽象类的方法 */ @Override public void setInfo(String name,int age) { super.age = age; super.name = name; } }
测试类:
package com.alex.test; /** * 测试类 * @author Alex */ public class Test { public static void main(String[] args) { Doctor doctor = new Doctor(); doctor.setInfo("Doctor",20); doctor.getInfo(); } }
然后添加一个Profession接口。同时,Doctor类实现这个接口,并继承Person抽象类。
Profession接口:
package com.alex.test; /** * 职业接口 * @author Alex */ public interface Profession { //在接口中定义变量的话,默认就是public static final修饰,也就是说接口中的成员变量都是常量 String professionName = "医生"; public void getProfessionName(); }
Doctor类:
package com.alex.test; /** * 医生实现类 * @author Alex */ public class Doctor extends Person implements Profession { /** * 实现setInfo方法,这个是Person抽象类的方法 */ @Override public void setInfo(String name, int age) { super.name = name; super.age = age; } /** * 实现getProfessionName方法,这个是Profession接口的方法 */ @Override public void getProfessionName() { //因为professionName是常量,所以使用类名.变量名方式引用 System.out.println("职业是:" + Profession.professionName); } }
在测试类中增加一行代码:
doctor.getProfessionName();
运行之后的结果就可以看到:
名字是:Doctor 年龄是:20 职业是:医生
本篇博文内容比较基础,希望大家多多包涵!
相关文章推荐
- 抽象类和接口的异同
- 接口和抽象类的异同——加入Java8的特性
- 抽象类与接口的异同浅谈,Java编程中的包含关系
- 浅谈设计层次的抽象类和接口异同
- 接口和抽象类异同
- 比较C#中抽象类(abstract class)和接口(interface)的异同
- 抽象类和接口之异同
- Java中接口与抽象类的异同点
- java中抽象类和接口的异同点
- 抽象类与接口的异同
- java 抽象类与接口的异同
- java中抽象类和接口异同
- 类、抽象类、接口的异同及使用场景
- 抽象类和接口的异同
- 抽象类和接口异同
- 1)Java学习笔记:接口和抽象类的异同
- 总结接口和抽象类的异同
- 抽象类和接口的异同
- Java 拾遗补阙 ----- 抽象类与接口的异同
- 抽象类和接口异同