java的抽象类和接口

一、抽象类

抽象类,就是用abstract关键字修饰的类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

abstract关键字

1.abstract修饰成员方法叫抽象方法

2.abstract修饰类叫抽象类

【注意事项】:

1.abstract修饰成员方法,但是这个方法没有方法体

2.abstarct修饰的成员方法所在的类,也必须加上abstract修饰

3.abstract修饰的成员方法,没有方法体,没有实现的代码,是一个半成品

4.抽象类下面可以有非抽象的方法

5.抽象类下面可以没有抽象的方法,但是你叫抽象类

6.抽象类不能被实例化

7.抽象类能被继承,但是必须重写抽象方法,非抽象方法可重写可不重写

8.一个类只能继承一个抽象类

abstract class Animal {//抽象类
    public abstract boolean eat(int a);//抽象方法,没有方法体
    public abstract int sleep();
    public void run() {//非抽象方法
        System.out.println("跑起来!!!");
    }
}

public class Monkey extends Animal{
    @Override
    public boolean eat(int a) {//重写抽象方法
        if (a == 1) {
            return true;
        }
        return false;
    }

    @Override
    public int sleep() {//重写抽象方法
        int a = 10;
        return a;
    }

    @Override
    public void run() {//重写非抽象方法
        System.out.println("上蹿下跳");
    }
}

public class Demo1 {
    public static void main(String[] args) {
        Monkey monkey = new Monkey();
        boolean eat = monkey.eat(1);
        System.out.println(eat);//true
        monkey.run();
        int sleep = monkey.sleep();
        System.out.println(sleep);
    }
}

二、final关键字

字面意思是:最终的,最后的

用法:

1.final修饰成员变量

使用final修饰成员变量的时候必须进行赋值(初始化)。如果赋值以后,这个值就能不能更改了。

2.final可以修饰局部变量

局部变量使用final可以不赋值。使用final修饰的局部变量一旦本赋值就不能修改

3.final可以修饰成员方法

final修饰的成员方法,子类不能重写!!!

4.final可以修饰类

final修饰的类不能被继承

package com.boke.app1;

final class Person {
    final int age = 23;//final修饰的成员变量必须赋值,且之后不能更改,否则报错

    public final void eat () {
        System.out.println("烤枸杞");
    }
    public void test () {
        final int num;//num是一个局部变量  可以不用直接赋值
       num = 20;//num被赋值了
       //num = 30;//下面想改变num值,不能改变,因为被final修饰
    }

}
//class Student extends Person{//报错,final修饰的类不能被继承
//    public final void eat() {//报错,final修饰的成员方法,子类不能重写
//
//    }
//}
public class Demo3 {
    public static void main(String[] args) {
        final Person person = new Person();
        //person.age = 56;//age被final修饰,age属性的值已经赋值了,不能再更改了
    }
}

 三、接口

接口由interface关键字修饰

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

语法格式:

                interface 接口名字{

                        成员属性;//很少用

                        成员方法;

                }

【注意事项】:

1.接口下面可以声明成员属性,但是要赋值,因为默认被final修饰了

2.接口下面的方法必须都是抽象方法,abstract关键字默认有的,可以写也可以不写

3.接口不能被实例化

4.接口必须使用一个类去实现(implements)它

5.必须重写接口中所有的抽象方法

6.一个类可以同时实现多个接口,相当于实现了多继承

package com.qfedu.app1;

interface Usb{//接口
    public abstract void write();
    public void read();
}
class Computer implements Usb{

    @Override
    public void write() {
        System.out.println("电脑具有了写的功能");
    }

    @Override
    public void read() {
        System.out.println("电脑具有了读的功能");
    }
}
public class Demo4 {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.read();//打印电脑具有了读的功能
        computer.write();//打印电脑具有了写的功能
    }
}

四、抽象类和接口的区别

1.接口的方法都是抽象的,抽象类可以有抽象方法,也可以有非抽象方法

2.类可以实现多个接口,但是只能继承一个抽象类

3.类如果要实现一个接口的话,必须要实现它所有的抽象方法
   类如果要继承一个抽象类,可以不求重写非抽象方法,但是抽象方法必须重写

4.抽象类去实现接口,接口的方法在抽象类中可以不强制重写

5.java8及以上的版本可以写默认的方法,这个方法带有方法体

6.接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值