黑马程序员技术交流社区

标题: 接口(疑问) [打印本页]

作者: Friends★    时间: 2012-4-24 21:25
标题: 接口(疑问)
接口中的方法是不是一定是抽象的?
如果一定是抽象的,方法前面是不是要加上abstract ?
还有就是接口中的方法是不是一定要被public修饰?
作者: 褚代江    时间: 2012-4-24 21:31
接口中的方法是不是一定是抽象的?   是的
如果一定是抽象的,方法前面是不是要加上abstract ?  不用加
还有就是接口中的方法是不是一定要被public修饰?  是的

作者: Friends★    时间: 2012-4-24 21:39
褚代江 发表于 2012-4-24 21:31
接口中的方法是不是一定是抽象的?   是的
如果一定是抽象的,方法前面是不是要加上abstract ?  不用加
还 ...

可是我今天写了一段代码,不加public修饰也没事。我把那个代码发给你,你帮我看看呗?
作者: 毕博    时间: 2012-4-24 21:41
是的 如果接口中的方法不是抽象的 那接口就变成抽象类了   
抽象类的特点:
1,抽象方法一定在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象。因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
抽象类不可以实例化。
     接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符。
        常量:public static final
        方法:public abstract
记住:接口中的成员都是public的。

作者: 赵嘉男    时间: 2012-4-24 21:41
abstract方法必须在abstract类中。
接口不是类,接口的所有方法都是抽象的。
接口是抽象类,必须是!只是接口中的方法 必须是抽象方法(没有方法体),而抽象类中,可以有抽象方法,也可以不是抽象方法(有方法体),一定要被public所修饰
作者: 程序猿    时间: 2012-4-24 21:44
本帖最后由 欧阳梦南 于 2012-4-24 21:47 编辑

接口中的方法一定是抽象的,抽象类中的方法不一定。
在接口类中不用加abstract,此时也是被加了的。
接口类中的方法默认都是public方法
作者: 王德南    时间: 2012-4-24 21:46
接口是属于抽象的,而且接口语义上类似于类,只是它缺乏实例变量,它的方法不需要任何方法体就可以声明。
所以接口中的方法是抽象的,而且方法前面也不用加上abstract 。
接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理
作者: 褚代江    时间: 2012-4-24 21:47
Friends★ 发表于 2012-4-24 21:39
可是我今天写了一段代码,不加public修饰也没事。我把那个代码发给你,你帮我看看呗? ...

发来瞅瞅
作者: 金超    时间: 2012-4-24 21:49
如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。
接口是抽象方法和常量值的定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
可以使用extends来继承接口的常量和抽象方法,但它与类中的extends不同,它可以继承有多个父接口(多重继承),各父接口间用逗号隔开。
接口中的所有常量必须是public static final,方法必须是public abstract,这是系统默认的,不管你在定义接口时,写不写修饰符都是一样的
定义接口
修饰符 interface 接口名 [extends 父接口列表]
{
常量域声明
抽象方法声明
}
class cat implements Animal
{
public void shout ()
{
System.out.print(“喵喵”);
}
}
实现接口
implements
一个类可以实现若干个接口
非抽象类必须实现所有的抽象方法
interface prt
{
public void prtln();
}
class A implements prt{
int a = 3;
public void prtln()
{
//输出a;
}
}
class B implements prt{
int b = 4;
public void prtln()
{
//输出b;
}
}
public class MyInterfaceDemo
{
public static void dost(prt c)
{
c.prtln();
}
public static void main(String[] args)
{
A a1 = new A();
B b1 = new B();
MyInterfaceDemo.dost(a1);
MyInterfaceDemo.dost(b1);
}
}
作者: Friends★    时间: 2012-4-24 21:50
赵嘉男 发表于 2012-4-24 21:41
abstract方法必须在abstract类中。
接口不是类,接口的所有方法都是抽象的。
接口是抽象类,必须是!只是 ...

可是我今天写了一段代码,不加public修饰也没事。我把那个代码发给你,你帮我看看呗?

class NoValusException  extends  RuntimeException{
        NoValusException(String message){
                super(message);
        }
}

interface Share{
           void  getArea();//  这边不是没有被public修饰嘛,难道默认的情况下就是被public修饰?
}
class  Rec  implements  Share{
        private int Len,Wid;
        Rec(int Len,int Wid){
                if(Len  <0  ||Wid<0)
                        throw  new NoValusException("feifazhi");
                this.Len=Len;
                this.Wid=Wid;
        }
       
        public void getArea() {
                System.out.println(Len*Wid);
               
        }
}



class Test7{
       
        public static void main(String[] args) {
               
                        Rec c=new Rec(4, 3);
                        c.getArea();
                       
        }
}
作者: Friends★    时间: 2012-4-24 21:55
褚代江 发表于 2012-4-24 21:47
发来瞅瞅

谢谢哦,我明白了,默认情况就是被public修饰。
作者: 孙天    时间: 2012-4-24 23:41
接口中的方法一定是抽象的,它是全局常量public static final,抽象方法public abstract,接口中的成员都是public,你可以不加,因为是默认的,不加系统会自动给你加上
作者: xiwangliujiao    时间: 2012-4-25 09:42
接口中的方法默认为public的,还有接口中的方法默认是抽象的,所以我们一般情况下在接口中写方法的时候一般是不写修饰符和abstract的,我们一般只写返回类型,方法名和参数类型等等




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2