抽象类和抽象接口代码分析

目录

 

 

一、引言 :

①  接口和抽象类的分析:

②  接口成员变量使用规范

③   对读者需求:

二、抽象类

1.抽象类的关键字 

三、接口

 1.接口概念

 2.接口关键字

 3.代码分析

①基本继承

②接口另一种方式组合继承

PS:


 

一、引言 :

PS:首先在开头,要介绍一些内容,由于前人已经总结,我就不总结,我将用代码来分析。总结内容可以直接参考。

          此外,这篇文章是为了我之后的多态做准备的。

①  接口和抽象类的分析:

主要是 接口的特点,抽象类的特点,他们的区别,共同点以及使用场景。

      https://blog.csdn.net/fsq0827/article/details/78646119

注意:在该博客 四-1 中,我做了如下修改:


1、抽象类中的普通方法可以有方法体,但是抽象方法不可以,所以接口中的方法(全部是抽象)不可以有方法体。

   总结:抽象方法不可以有方法体。

②  接口成员变量使用规范

     https://blog.csdn.net/qiumengchen12/article/details/44852023

③   对读者需求:

看这篇文章之前,你应该已经知道了继承,重载,这两个基本知识以及Java面向对象基本知识。

那么接下来,我就开始了。

二、抽象类

1.抽象类的关键字 

  • extends    抽象类需要继承,才可以使用(有构造方法)
  • abstract    在方法名或者类名之前加上

例如  abstract people :表示people抽象类,abstract  eat();  表示抽象方法

 2.代码块:

                     

import java.util.*;

//抽象类
abstract class people{
    public abstract void method1();
    public int a ;
}
class  me extends people{

    @Override   //重写父类抽象方法
    public void method1() {
        System.out.println("重写了抽象类的抽象方法");
    }
}

public class ABSTRACTTest {
    public static void main(String[] args) {
        people p =new me();
        p.method1();
        p.a=10;
        System.out.println(p.a);
    }
}

  结果如下:

分析如下:

  • 抽象类必须被子类实例化,不能自身实例化对象
  • 请注意,此处用的是people p = new me();  因为抽象类用于多态,所以此处为向上转型
  • 若抽象类与子类有命名相同的成员变量,如下图
import java.util.*;

//抽象类
abstract class people{
    public abstract void method1();
    public int a=0 ;
}
class  me extends people{
public int a=1;
    @Override   //重写父类抽象方法
    public void method1() {
        System.out.println("重写了抽象类的抽象方法");
    }
}
public class ABSTRACTTest {
    public static void main(String[] args) {
        people p =new me();
        p.method1();
        me m=new me();
        m.method1();
        System.out.println(p.a+" "+m.a);
    }
}

输出如下 :

 

 

 

 

 

 

三、接口

 1.接口概念

  • 接口是抽象类的延申,在抽象类的基础上,只有抽象方法,没有普通方法(构造方法也没有)

 2.接口关键字

  • extends  可以不继承,但是需要实现,才可以实例化出对象
  • implement  类实现接口时需要的关键字

 3.代码分析

①基本继承

import java.util.*;

//接口一
interface people{
    public static final int a = 0;
    public abstract void method2();
}
//接口二
interface people2{
    public static final int b = 1;
    public abstract void method3();
}
class me implements people,people2 {
    @Override
    public void method2() {
        System.out.println("接口一");
    }
    @Override
    public void method3() {
        System.out.println("接口二" );
    }
}
public class INTERFACETest{
    public static void main(String[] args) {
        people p=new me();
        p.method2();
        System.out.println(p.a);
        people2 p2 = new me();
        p2.method3();
        System.out.println(p2.b);
    }
 }

结果如下:

分析如下:

  •  定义了两个接口 people 和 people2 ,用me类来实现
  • me类中分别重写了两个接口的抽象方法,
  • 分别调用两个接口的引用p ,p2 来实例化对象,并调用接口方法(注意实例化的方式,也是向上转型)
  • 表明接口支持多继承,可以同时多个接口

②接口另一种方式组合继承


代码如下:

import java.util.*;

//接口一
interface people{
    public static final int a = 0;
    public abstract void method2();
}
class  student{
    public void eating(){
        System.out.println("妹妹喜欢吃零食");
    }
}
class me extends student implements people {
    @Override
    public void method2() {
        System.out.println("接口一");
    }

}
public class INTERFACETest{
    public static void main(String[] args) {
        people p=new me();
        p.method2();
        System.out.println(p.a);
        student w = new me();   //此处也可以 me w = new me();只不过前面用了向上转型而已
        w.eating();
    }
}

结果如下:

分析如下:

  • 该代码由继承和接口实现共同构成
  •  创建了一个接口(people)和两个普通类(student,me)
  •  me类继承student类并且实现了people类,然后在测试类中实例化me类对象,并调用抽象方法和父类方法

PS:

  • 抽象类和接口都和向上转型相关,不同场景使用不同,具体内容可以看看我文章引言。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值