在Java中的“声明”

文章介绍了Java中的抽象类和抽象方法,强调它们在代码规范和继承中的作用。抽象类可以包含抽象方法,但有抽象方法的类必须是抽象类。由于抽象方法的冗余,接口被引入,接口提供了更严格的规范,所有方法默认为publicabstract。类可以通过implements关键字实现多个接口,支持多态。
摘要由CSDN通过智能技术生成

抽象方法与抽象类的介绍

抽象类:定义了抽象方法的类或者用abstract关键字修饰的类就是抽象类。
抽象方法:就是用abstract关键字修饰,并且没有大括号直接,直接分号结束的方法。
(1)抽象类的语法格式 :
[权限修饰符(例如:public private等)] abstract class 类名
{
成员变量;
成员方法;
构造方法;
抽象方法;
}
(2)抽象方法的语法格式:
[访问修饰符] abstract 返回值类型 方法名(参数表);
例如:
public abstract void show();
abstract的注意事项:
1.抽象类中可以有抽象方法,也可以没有。
例如:

public abstract class People {
    public int age;
    public String name;
    public void show()
    {
        System.out.println(age+""+name);
    }
}

2.但拥有抽象方法就必须是抽象类。
例如:
在这里插入图片描述
很明显程序报错无法运行。
那么抽象类到底有何意义呢?
其实抽象类的意义不在于实例化而在于被继承,若一个类继承自抽象类,那么就必须重写该方法。因此抽象类对子类有很强的规范性。

与C语言的对比

在C语言中中,我们常常会说先声明后定义,而在Java中同样也有这种类似的声明概念,即抽象方法。抽象方法和抽象类有效的帮我们解决了代码的规范问题。

抽象方法的缺点

抽象方法的的缺点十分容易找到就是代码过于赘余。
例如:

public abstract class People {
    public int age;
    public String name;
    public  abstract void show();
    public  abstract void walk();   
    public abstract void sleep();
    public abstract void watch();
    public abstract void sniff();
    public abstract void hear();
}

我们可以看到pubic abstract 过于重复,而且抽象类又不完全是只能写抽象方法,因此起到的规范性其实并不是特别强。那么这样解决这个问题呢?于是引入了下一个概念:接口

接口的介绍

(1)接口定义
使用 interface 来定义一个接口。接口的定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义方法定义两部分组成。定义接口的基本格式如下:
[修饰符] interface 接口名[ extends 父接口名列表]{
[public ][ static ][ final ]常量;
[ public ][ abstract ]方法;
}
修饰符:可选,用于指定接口的访问权限,可选值为 public 。如果省略则使用默认的访问权限。
接口名:必选参数,用于指定接口的名称,接口名必须是合法的 Java 标识符。一般情况下,要求首字母大写。
方法:接口中的方法只有定义而没有实现。
例如:

public interface CallInterface {
    final static float PI=3.1415926f;//定义用于表示圆周率的常量PI
    float getArea(float r);          //定义一个计算面积的方法 getArea()
    float getCircumference(float r); //定义一个用于计算周长的方法 getCircumference()
}

(2)接口实现
接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键 implements ,其基本格式如下:
[修饰符] class <类名>[ extends 父类名][ implements 接口列表]
例如:

public class Circle implements CallInterface{
    public float getArea(float r){
        return PI*r*r;
    }
    public float getCircumference(float r){
        return 2*PI*r;
    }
}

值得一提的是尽管接口是一种新的关键字,但它的本质还是一种类即public abstra的类,但与直接写public abstract类不同的是它其实加了一个规则:既无法写成员方法了,所写的全部方法其实都是public abstract的方法了。因此规范性更强。而与继承不同的是它支持多接口[ implements a1,a2,a3……(a1,a2表示接口名)],与继承相同的是它也支持多态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值