java中的抽象类与接口

1. 抽象类

用关键字abstract修饰的类,都是抽象类,不能被实例化。

而含有一个或多个抽象方法的类必须定义为抽象类,否则会报错。


即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。

如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。


抽象方法,只有声明,没有实现主体。

抽象方法声明: 权限  abstract 返回类型  方法名(形参表);

                          e.g: public abstract void fun();


抽象类声明:  权限 abstract class 类名

                          e.g: public abstract class Test{

                                 }


抽象类可以定义成员变量、成员方法,可以有构造方法。

如果子类没有实现父类的所有抽象方法,子类也需要定义为abstract抽象类。


2.接口

接口声明:  public interface 接口名{

                     }

接口中的方法必须是抽象方法,只有函数声明、没有实现。

接口中可以含有 变量和方法。

但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),即只能是常量,接口中的数据对所有实现类只有一份,所以是static;

而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误)。

接口中没有构造方法。


3. 类: 单继承

 接口:多继承


4.  练习题,注意接口里面方法的权限

package com.xiyou.weijie.chap5;

public interface JavaInterface {

	int a = 10;

	void show();
}

package com.xiyou.weijie.chap5;

public class Test implements JavaInterface {

	void show() {
		// TODO 自动生成的方法存根

	}
}

上述代码错在哪里?

解答:

         由于接口中的方法会全部默认为public, 而在实现接口时,show()方法的权限为无修饰符,低于public,违背了方法覆盖的要求。(见博客Java继承1-上溯造型)

         所以Test类中的方法应为   public void show(){

                                                        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值