如果文章内有错误,欢迎指正
一.抽象类
在开发过程中抽象的使用场景,我觉得在以下几个地方:
(1)在协同开发的时候,好多功能需要共用一个方法,那这个时候我们就需要有人来定义抽象类,来规范共用的代码。
(2)我们需要用到现成的方法,或者改写一些方法时,就要用到抽象类
定义抽象类:
package com.test;
public abstract class Facroty {
String runName;
public void run(String str) {
this.runName=str; //跑的动作
}
public void getRun(){
String company="小明公司的"; //默认实现,一些共用
System.out.println(company+this.runName);//调用某一个方法
}
}
继承抽象类:
package com.test;
public class test {
public static void main(String[] args) {
Car car= new Car();
car.run("汽车在跑");
car.getRun();
Ship ship = new Ship();
ship.run("轮船在跑");
ship.getRun();
Bike bike = new Bike();
bike.getRun();
}
}
class Car extends Facroty{
@Override
public void run(String str) {
super.run(str);
}
}
class Ship extends Facroty{
@Override
public void run(String str) {
super.run(str);
}
}
class Bike extends Facroty{
@Override
public void run(String str) {
super.run(str);
}
@Override
public void getRun() {
System.out.println("没有调用父抽象类,自己的公司自行车在跑");
}
}
结果:
二.接口
1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如有一个类,实现了某个功能,突然有一天,发现这个类满足不了需求了,然后又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。
例如两个开发者,开发时间完全不一致,那么需要两个人的配合开发,则需要一个人讲接口写好,定义好其中所有的变量命名规范、函数定义规范。具体实现类的开发人员则只需要按照接口实现相应功能即可。
interface TestApi {
public void CPU();
public void memory();
}
public interface TestApi2 {
public void keyboard();
public void mouse();
}
public class test {
public static void main(String[] args) {
//接口第一种常用方法
UseComputer useComputer=new UseComputer();
useComputer.getMethod(new Computer());
//接口第二种常用方法
useComputer.getMethod(new TestApi() {
@Override
public void CPU() {
System.out.println("我是CPU2");
}
@Override
public void memory() {
System.out.println("我是内存2");
}
});
}
}
class UseComputer{
public void getMethod(TestApi testApi){
testApi.CPU();
}
}
class Computer implements TestApi,TestApi2{
@Override
public void CPU() {
System.out.println("我是CPU");
}
@Override
public void memory() {
System.out.println("我是内存");
}
@Override
public void keyboard() {
System.out.println("我是键盘");
}
@Override
public void mouse() {
System.out.println("我是鼠标");
}
}