精华内容
下载资源
问答
  • Java接口声明和实现

    千次阅读 2020-04-16 15:39:30
    1.接口:用于声明一组类的公共操作的接口,Java把对接口功能的继承称为实现(implement),接口只是声明了功能是什么,而并没有定义如何实现该功能,功能的实现是继承这个接口的各个子类完成的 2.组成:接口往往...

    接口的概念Interface

    1.接口:用于声明一组类的公共操作的接口,Java中把对接口功能的继承称为实现(implement),接口只是声明了功能是什么,而并没有定义如何实现该功能,功能的实现是在继承这个接口的各个子类中完成的
    2.组成:接口往往由一组常量和抽象方法组成,一般不包括变量和有具体实现的方法
    3.性质:支持多重继承
    【注】接口与抽象类的区别:
    (1)接口不能实现任何方法,而抽象类可以
    (2)类可以实现许多接口,但只有继承一个父类
    (3)接口不是类分级结构的一部分,没有联系的类可以实现相同的接口

    接口的声明

    定义接口的一般格式:

    [ public ] interface 接口名 [ extends 父接口名列表 ]
    {
    	[ public ] [ final ] [ static ] 类型 变量名 = 常量值 ; //常量声明
    	...
    	[ public ] [ abstract ] 返回类型 方法名 (参数列表) ; //抽象方法声明
    	...
    }
    

    例如Shape的接口声明:

    public interface Shape
    {
    	public final static double PI = 3.1416;
    	public abstract void draw(Graphics g);
    }
    

    接口的实现

    实现接口一般格式:

    class ClassName extends ParentClass implements interface1,interface2
    {
    	...  //接口中方法的实现
    }
    

    接口的程序设计举例

    Write a program to complete following tasks
    (1)declare a interface name:Shape
    public interface Shape
    {
    public double getArea(); //return the surface area of shape
    public double getVolumn();
    public double getName(); //return class name
    }
    (2)Define three classes Rectangle,Circle and Clinder to implements the following diagram
    (3)Define a class named ShapeTest to test above classes
    在这里插入图片描述
    【输出结果】
    Rectangle: area=6.00, Volumn=0.00
    Circle: area=50.27, Volumn=0.00
    Clinder: area=251.33, Volumn=235.62

    此处给出主函数

    public class ShapeTest 
    {
    	public static void main(String[] args) 
    	{
    		Shape s[] = new Shape[3];
    		s[0] = new Rectangle(2,3);
    		s[1] = new Circle(4);
    		s[2] = new Clinder(5,3);
    		for(Shape ele:s)
    			System.out.printf("%s: area=%.2f,Volumn=%.2f\n",ele.getName(),ele.getArea(),ele.getVolumn());
    	}
    }
    

    以下给出完整代码

    package ml; //该java程序在ml包里
    interface Shape //接口的定义
    {
    	public double getArea();
    	public double getVolumn();
    	public String getName();
    }
    class Rectangle implements Shape
    {
    	private int w;
    	private int l;
    	public Rectangle(int wValue,int lValue)
    	{
    		w = wValue;
    		l = lValue;
    	}
    	public double getArea()
    	{
    		return w*l;
    	}
    	public double getVolumn()
    	{
    		return 0;
    	}
    	public String getName()
    	{
    		return "Rectangle";
    	}
    }
    class Circle implements Shape
    {
    	private int r;
    	public Circle(int rValue)
    	{
    		r = rValue;
    	}
    	public double getArea()
    	{
    		return Math.PI*r*r;
    	}
    	public double getVolumn()
    	{
    		return 0;
    	}
    	public double getLength()
    	{
    		return 2*Math.PI*r;
    	}
    	public String getName()
    	{
    		return "Circle";
    	}
    }
    class Clinder extends Circle
    {
    	private int h;
    	public Clinder(int r,int height)
    	{
    		super(r);
    		h = height;
    	}
    	public double getArea()
    	{
    		return 2*super.getArea()+super.getLength()*h;
    	}
    	public double getVolumn()
    	{
    		return super.getArea()*h;
    	}
    }
    public class ShapeTest 
    {
    	public static void main(String[] args) 
    	{
    		Shape s[] = new Shape[3];
    		s[0] = new Rectangle(2,3);
    		s[1] = new Circle(4);
    		s[2] = new Clinder(5,3);
    		for(Shape ele:s)
    			System.out.printf("%s: area=%.2f,Volumn=%.2f\n",ele.getName(),ele.getArea(),ele.getVolumn());
    	}
    }
    

    运行的结果为:
    在这里插入图片描述

    展开全文
  • 接口声明变量

    千次阅读 2018-05-02 03:28:20
    经常见List<?> list= new ArrayList&...但是发现list只是ArrayList的接口不是它的父类 ,不是父类引用指向子类对象如果是应该是AbstractLIst ablist= new ArraryList(); 或者直接写为ArrayL...

    经常见List<?> list= new ArrayList<?>

               Map<?,?> map = new  HashMap<?,?>

    但是发现list只是ArrayList的接口不是它的父类 ,不是父类引用指向子类对象

    如果是应该是AbstractLIst ablist= new ArraryList();  或者直接写为ArrayList<?> list= new ArrayList<?>





    为什么要用接口引用指向实现类的对象

    这种写法其实Java多态的表现形式

    1. 多态的定义指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

    List list;是在栈区开辟一个空间放list引用,并没有创建对象所以不知道ArrayList还是LinkedList当你list= new ArrayList(); 就创建了ArrayList对象。并且把开始创建的list引用指向这个对象ArrayList和LinkedList都是List的实现类。

    为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 

    问题就在于List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处

    注意事项

    list只能使用ArrayList中已经实现了的List接口中的方法,ArrayList中那些自己的、没有在List接口定义的方法是不可以被访问到的

    list.add()其实是List接口的方法

    但是调用ArrayList的方法如 clone()方法是调用不到的




    接口的灵活性就在于“规定一个类必须做什么,而不管你如何做”。我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似。

    [java]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. //定义接口InterA  
    2. interface InterA  
    3. {  
    4.  void fun();  
    5. }  
    6. //实现接口InterA的类B  
    7. class B implements InterA  
    8. {  
    9.  public void fun()  
    10.  {  
    11.   System.out.println(“This is B”);  
    12.  }  
    13. }  
    14.   
    15. //实现接口InterA的类C  
    16. class C implements InterA  
    17. {  
    18.  public void fun()  
    19.  {  
    20.   System.out.println(“This is C”);  
    21.  }  
    22. }  
    23.   
    24. class Test  
    25. {  
    26.  public static void main(String[] args)  
    27.  {  
    28.   InterA a;  
    29.   a= new B();  
    30.   a.fun();  
    31.   a = new C();  
    32.   a.fun();  
    33.  }  
    34. }  



        输出结果为:

        This is B
        This is C


      上例中类B和类C是实现接口InterA的两个类,分别实现了接口的方法fun(),通过将类B和类C的实例赋给接口引用a,实现了方法在运行时的动态绑定,充分利用了“一个接口,多个方法”,展示了Java的动态多态性。

      需要注意的一点是:Java在利用接口变量调用其实现类的对象的方法时,该方法必须已经在接口中被声明,而且在接口的实现类中该实现方法的类型和参数必须与接口中所定义的精确匹配

    展开全文
  • 接口声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但...

     

    这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过。对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西: 
    ①接口的声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但是java没有这个关键字,但权限上可以理解为default),无论是private还是protected都是不可以的。 
    ②关于修饰符大小的说明:public>protected>默认>private,用一张表就是如下: 
     
    ③综合①②,问题出现了,为什么protected的权限比默认权限要高,但是却不能使用它修饰类或者接口呢?原因何在?本题评论如此之少,也没有人深入揭示问题所在,都只是说什么由于需要被其他包其他类实现,所以就是public,那么对于默认修饰符的存在你们怎么解释?我简单说明一下:首先,这里对于接口声明的默认修饰符,可不是像接口中的方法那样,不写修饰符就默认是public了,接口的声明不写修饰符就是default权限,只能同包的类可以访问,其他包是不行的,不信试试看。其次虽然protected权限要比默认权限高,但是对于类或者接口的声明却不能使用,可以简单这么理解:一个外部类或者接口,它的上一层结构是包,因此他们只有两个作用域:同包,任意位置。除此之外的权限没有任何意义,而基于此,public和默认权限就是足够的了,不需要使用protected这种多余的权限造成更为复杂的类关系,因此java限制了类或接口的声明,就仅限于public和默认。

    转载于:https://www.cnblogs.com/sunyubin/p/9720691.html

    展开全文
  • Java,用接口声明变量

    千次阅读 2018-08-16 21:44:22
    接口 public interface Happy { void SayHappy(); } 类  public class People implements Happy { @Override public void SayHappy() { // TODO Auto-generated method stub System.out.println("...

     接口

    public interface Happy {
    	void SayHappy();
    }

    类 

    public class People implements Happy {
    
    	@Override
    	public void SayHappy() {
    		// TODO Auto-generated method stub
    		System.out.println("我很快乐!");
    	}
    
    }

    测试类 

    public class Test3 {
    	public static void main(String[] args) {
    		Happy happy = new People();
    		happy.SayHappy();
    	}
    }

    输出:

    我很快乐!

     

    展开全文
  • public interface IUserManage { public void addUser(User user); ...这个类里,直接声明了userManage,并且userManage可以直接调用接口里的那三个方法 接口不是只能用来implements实现吗?
  • JAVA接口声明

    千次阅读 2017-09-27 19:57:53
    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new ...用JAVA接口声明一个变量是什么意思? 不是接口变量,而是一个接
  • Java定义接口

    万次阅读 2016-11-26 15:30:31
    一、类定义接口 package com.dao.util; public class Util { public interface Worker { void work(); } } package com.dao.util; import com.dao.util.Util.Worker; public class Demo implements Worker...
  • java接口声明和使用

    千次阅读 2019-11-13 19:22:33
    接口的出现就是为了让java程序的一个类可以实现多个接口,克服单继承的缺点。 接口声明: interface 接口的名字 //接口体 interface Computable{ int MAX=100; int f(int x);//接口方法体 } class China ...
  • Java接口声明对象

    千次阅读 2015-10-11 16:40:28
    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new ...用JAVA接口声明一个变量是什么意思? 不是接口变量,而是一个接口类型的
  • java中接口是否可以继承多个接口

    千次阅读 2018-11-06 20:04:52
    接口是常量值和方法定义的集合。接口是一种特殊的抽象类。 java类是单继承的。classB Extends classA ...java接口可以多继承。Interface3 Extends Interface0, Interface1, interface…… 不...
  • //编写ANIMAL接口接口中声明run的方法 interface Animal // 声明接口Animal { abstract void run();// 定义抽象方法 } class Bird implements Animal // 实现接口 { public void run() { System.out....
  • java接口里面可以定义变量么?

    千次阅读 多人点赞 2020-03-01 18:39:27
    答案是:可以,但必须是public static final的,而且必须是public static final的。 先看一个例子: //基于JDK1.8 //IA.java public interface IA { double NUM = 1;//等价于public static final double NUM = 1; ...
  • Java 到底是应该用接口类型 还是实现类的类类型去引用对象?
  • 关于接口的使用,接口的引用

    千次阅读 2014-03-13 22:16:59
    接口作为引用类型来使用,任何实现该接口的类的实例都可以存储接口类型的变量。。。 接口的一般使用 接口的使用与类的使用有些不同。需要使用类的地方,会直接使用new关键字来构建一个类的实例进行应用:...
  • Java语言接口是一个抽象类型,是抽象方法的集合,通常以关键字interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口中只能定义常量和抽象方法,对。相关介绍:接口接口(Interface),...
  • Kotlin系列之接口中的属性

    千次阅读 2018-03-06 00:03:47
    今天我们看看如何让Kotlin的接口声明属性。 前面的文章我们已经介绍过Kotlin...下面是一段Kotlin中接口声明的代码,帮助大家复习一下。 Kotlin代码 package kt interface Clickable{ fun click() ...
  • Java接口类只能声明静态属性

    千次阅读 2015-09-15 10:19:04
    Java的接口声明属性时会发现一个很奇怪的现象, 可能大家在很多地方都会看到这样的描述: 接口的只能有静态的属性, 但是在实际写代码你会发现, 可以在接口中声明一个不是静态的属性, 并且不会报错, 如下: ...
  • 接口声明引用变量的作用

    千次阅读 2018-03-13 21:50:58
    随便一个类, 只要它继承实现了那个接口, 那么它的实例都可以在这里被引用. 3, 方法的返回类型也是要定义为接口类型, 因为, 你要记住:我们这个方法是需要返回一个有特定功能的对象! 同理, 方法的参数的类型也是如此!...
  • 中可以再定义接口,以及接口的实现类 描述:  这种写法的好处是将多个功能相同的简单接口实现类进行统一管理,方便调用 以下类中定义了一个接口,以及这个接口的两个实现类,最终编译的.class文件4个 ...
  • 接口中的方法

    万次阅读 多人点赞 2016-12-04 11:39:35
    接口中的方法  | 接口Interface 1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化 2. 接口中的方法默认都是public、abstract类型的。 3. 接口中只能包含public、...
  • 接口中的方法不能声明为static

    千次阅读 2014-04-10 09:57:01
    1如果可以定义抽象静态方法static,设 static abstract method(); 是抽象类A的方法 那么因为是静态方法那可以用A.method(); 而这个方法又是抽象的没有方法体,掉用了怎么执行呢?
  • Java定义接口的关键字是什么?

    千次阅读 2021-02-12 11:07:32
    Java定义接口的关键字是“interface”。“interface”是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合。接口不能直接实例化,也不能包含成员的任何代码,只定义成员本身...
  • Java中接口中的方法定义规则

    万次阅读 多人点赞 2016-09-14 11:24:52
    Java接口中的方法定义规则最近做某个公司校招的笔试的时候,遇到了如下一个题:题目如下:(多选题)请选择以下接口定义正确的方法()A:public static void main (String[] args);B:private void test();C:public ...
  • java中接口的使用(默认方法和静态方法)

    千次阅读 多人点赞 2020-07-23 21:50:46
    由于最近学习接口这一部分,就想着记下来,以便以后的复习。如果那里有写的不对的请指正! 1什么是接口接口概述) 既然要用接口首先要明确什么是接口,它能帮助我们实现什么哪些事儿。 接口就是规范,定义的是一...
  • /*1)编写Animal接口接口中声明run()方法;  2)定义Bird类和Fish类实现Animal接口;  3)编写Bird类和Fish类的测试程序,并调用其中的run()方法 */ interface Animal {//声明接口Animal abstract ...
  • 接口声明变量的一个实际例子

    千次阅读 2017-12-12 19:55:26
    实际工作中在重写UDTF子类的process方法的时候,遇到了一个forward方法,研究源码的过程接口的概念更为清晰了。 UDTF接口说明如下: Java UDTF需要继承com.aliyun.odps.udf.UDTF类。这个类需要实现4个接口。...
  • 接口中的常量定义和使用

    千次阅读 2019-07-03 10:14:05
    接口当中可以定义"成员变量", 单必须使用public static final三哥关键字就行修饰 小结: 接口当中的常量,可以省略public static final; 接口当中的常量,必须进行赋值;不能不赋值; 通过接口直接访问常量 ...
  • Java 枚举类和自定义枚举类和enum声明及实现接口1.枚举类1.枚举类的属性2.自定义枚举类2.Enum枚举类3.实现接口的枚举类 1.枚举类 注: JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 ...
  • /*1)编写Animal接口接口中声明run()方法;  2)定义Bird类和Fish类实现Animal接口;  3)编写Bird类和Fish类的测试程序,并调用其中的run()方法 */ interface Animal {//声明接口Animal abstract void ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 970,337
精华内容 388,134
关键字:

在接口中可以声明