jav 抽象类,接口作为形参的使用场景

前几天有人问我在构造方法中传递一个形参,这个形参是要传递一个抽象类的引用,既然有人问到了,就表示还有人对此不太明白,今天周末没事,就瞎写一篇博客记录下,方便学习!

抽象类作为形式参数传递可以是构造函数,普通函数

1:抽象类作为形式参数传递给构造函数

代码体现

Person.java 测试抽象类

package cn.zgz.demo;

public abstract class Person {

public String name;

private int age;

public Person(String name, int age) {

super();

this.name = name;

this.age = age;

}

public abstract void study();

}

PersonInfo.java就一个无参的构造函数

public class PersonInfo {

public PersonInfo(Person p){

}

}

Test.java测试类

public class Test {

public static void main(String[] args) {

PersonInfo pInfo =new PersonInfo(new Person("王祖贤",24){

@Override

public void study() {

System.out.println("我爱你");

}

});

}

}

我们在PersonInfo构造函数中传递了一个时Person的引用对象,而Person是一个抽象类,所以必须实现它的study()方法,这种传递方式很多地方用到在架构上比较多,平时代码这么写情况是比较少见的,至于普通方法也是一样的

2:接口作为形式参数传递给构造函数

代码体现

IListener.java 接口

package cn.zgz.inter;

/**

* 接口 模拟android  button点击事件

*/

public interface IListener {

void click();//点击方法

}

package cn.zgz.inter;

Button.java

/**

* Button --模拟android中的Button按钮

* 构造函数是一个接口

*/

public class Button {

public Button(IListener listener){

listener.click();

}

}

Test.java测试类

package cn.zgz.inter;

/**

* 测试类

*/

public class Test {

public static void main(String[] args) {

Button button = new Button(new IListener() {

@Override

public void click() {

System.out.println("我被点击了");

}

});

}

}

至于是传递抽象类还是接口要看具体的业务需求了,如果要传递的这个参数不仅对外提供了未实现的方法,而且还做了其他的初始化工作或者还有其他可调用的业务方法,那么就用抽象类,否则就用接口作为形参

时间: 2024-11-08 18:14:16

jav 抽象类,接口作为形参的使用场景的相关文章

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数

小知识(五):抽象类&接口

抽象类abstract: 抽象类和抽象方法可以用abstract关键字进行标识.就是没有完全定义的类或方法.所以不能直接实例化操作. 就因为他没完全定义所以不能用sealed关键字进行密封. 抽象方法不含程序主体: public abstract class Student { //抽象方法,不含程序体 public abstract void GetStudentID(); //子类可访问字段 prodected int i; //定义i的属性 public int I { get { ret

普通类 抽象类 接口

首先得搞懂什么是抽象类:一.概念:    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.    比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆.三角形这样一些具体概念.它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念.正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

19 抽象类 接口类 封装. 多态

主要内容: 1.  抽象类(接口类): 制定一个规范  : from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self):pass class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' % self.mon

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 下一章 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

抽象类和接口的区别,使用场景

shared  from http://yinny.iteye.com/blog/1152430 1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做. 2 如果许多类实现了某个接口,那么每个都要用代码实现那些方法 3 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现. 所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会

java----基础(this,继承,多态,抽象类,接口)

this指针 this指针在类定义时用到,this属于用类实例化的对象,只能在定义类的时候使用:(在下面的代码中会有体现) 类变量&类方法 定义: 访问修饰符 static+数据类型+变量名 所有该类的对象均可访问,均可修改,不会在调用后初始化,相当于全局变量. 可以被所有对象访问到,并且可以通过类访问到  类名.类变量 静态方法 == 类方法 可以被类名和对象访问到 原则上类变量用类方法来访问 类方法中不能访问非类变量,类变量可以被非类方法访问. 四种访问控制符: public : 对外公开

C++ 虚函数&纯虚函数&抽象类&接口&虚基类(转)

http://www.cnblogs.com/fly1988happy/archive/2012/09/25/2701237.html 1. 多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的. 多态可以让父类的指针有“多种形态”,这是一种泛型技术.(所谓泛型技术,就是试图使用不变的代码来实现可变的算法). 2. 虚函数 2.1