JAVA抽象类与接口

抽象类:

  • 关键词:abstract
  • 作用:模板的作用

抽象类的使用实例:

1.抽象类中可以使用代码块

abstract class   BaseAndroidStudy{
    //定义一个代码块
    {
        System.out.println("锻炼身体");
    }
}

2.抽象类中也可以定义构造方法
但是需要注意的是:
对于抽象类的构造方法,仅仅是为其赋值,并不能创建一个对象

abstract class   BaseAndroidStudy{
        public BaseAndroidStudy(String javaBook,String dream){
        this.javaBook = javaBook;
        this.dream = new Dream();
        this.dream.name = dream;
    }
}

3.抽象类中可以定义抽象方法也可以定义普通方法

  • 定义抽象方法:
    定义一个抽象方法 不需要实现 由子类来实现
abstract class   BaseAndroidStudy{
    public abstract void studyC();
 }
  • 定义一个普通方法:
    定义一个普通方法 已经确定了这个方法的具体实现
abstract class   BaseAndroidStudy{
    public void studyJava(){
        System.out.println("参加Java培训班");
    }
}

4.继承一个抽象类
注意事项:
一、如果继承一个抽象类,就必须实现抽象类里面的抽象方法
二、如果不实现抽象方法,需要将此类改为抽象类

abstract class   BaseAndroidStudy{
    //定义一个属性用于保存数据
    public String javaBook;
    public Dream dream;
    //对于抽象类的构造方法,仅仅是为其赋值,并不能创建一个对象
    public BaseAndroidStudy(String javaBook,String dream){
        this.javaBook = javaBook;
        this.dream = new Dream();
        this.dream.name = dream;
    }
    //定义一个抽象方法 不需要实现 子类来实现
    public abstract void studyC();
    //定义一个普通方法 已经确定了这个方法的具体实现
    public void studyJava(){
        System.out.println("参加Java培训班");
    }
}
class Student extends BaseAndroidStudy{
    String name;
    @Override
    public void studyC() {
        System.out.println("看书、看视频");
    }
    public Student(String name,String bookName,String dream){
        super(bookName,dream);
        this.name = name ;
    }
}

接口:

  • 定义:接口就是定义一套规则/规范
  • 作用:定义一套方法 用于对象之间的通信
  • 接口里面的默认规则:
    1.接口里面默认的变量static final 也就是常量
    2.不能定义变量
    3.接口里面不能定义代码块
    4.接口里面不能定义构造方法
    5.接口里面不能添加普通方法/对象方法/实列方法
    5.只有抽象方法
  • 接口的实现:
    使用implements实现一个接口
    一个类可以实现多个接口
    一个接口可以继承多个接口
interface testInterface{
    int I = 100;
    int COUNT = 20;
    void test();
    class inner{
        int name;
        public void show(){
            System.out.println("内部类");
        }
    }
}
class PXDClass implements testInterface{
    @Override
    public void test() {
        inner in = new inner();
        in.show();
    }
}

运用抽象类和接口的小实战:

  • 目标:使用抽象类、继承、接口实现按钮点击事件
  • 具体步骤:
    (一)、创建一个管理界面的抽象类 定义一个界面从创建到结束的模板
public abstract class Activity {
    //保存这个界面的所有子视图
    public ArrayList<View> childs = new ArrayList<>();
    //界面创建
    public abstract void onCreate();
    //界面销毁
    public abstract void onDestory();
    //讲子控件添加到当前界面上
    //接收的时候是用父类去接收子类
    //当需要访问子类内容的时候 就要强制转换为对应的类
    public  void  addChild (View v){
        if (v instanceof Button) {
            Button btn = (Button)v;
            System.out.println(btn.title+"按钮显示到界面上了");
        }
        if(v instanceof ImageView){
            ImageView iv = (ImageView) v;
            System.out.println(iv.picture+"的图片显示到界面");
        }
        //保存子类控件
        childs.add(v);
    }
}

(二)、搭建主界面

public class MainActivity extends Activity implements View.OnClicklistener{
    Button btn;
    ImageView img;
    //构造方法
    public MainActivity(){
        //当界面被创建 就自动调用onCreate方法
        onCreate();
    }
    @Override
    public void onCreate() {
     //主界面如何布局
     //添加一盒按钮
         btn = new Button("分享","红色");
     //添加一张图片
         img = new ImageView("周杰伦");
     //将创建的控件添加到当前界面
        addChild(btn);
        addChild(img);
     //1.
     //如果一个控件需要监听事件 那么就必须实现监听事件的接口
     //告诉按钮是谁在监听这个事件
        btn.listener = this;
     //2.
     //给imageView添加一个事件
     img.listener = new View.OnClicklistener() {
         @Override
         public void onClick(View v) {
             System.out.println("图片被点击了");
         }
     };
    }
    //模拟触摸
    public void touch(){
        //将屏幕触摸的事件传递给按钮
        btn.getTouchEvent();
        img.getTouchEvent();
    }
    @Override
    public void onDestory() {
     //销毁之前需要做点什么事情
    }
     //当事件触发 就会来调用这个onClick方法
    @Override
    public void onClick(View v) {
        System.out.println("按钮被点击了");
    }
}

(三)、创建一个类管理一个视图显示和事件监听

public class View {
    //所以视图共有的属性
    String backgroundColor;
    String bordercolor;
    //记录谁想监听我这个事件
    //暂时我不确定是谁要监听 但是要监听的人肯定实现了这个接口
    OnClicklistener listener;
    //所有的视图都有监听事件
    //定义内部接口 封装
    public interface OnClicklistener {
        //定义一套方法 约束外部使用这些方法来监听事件
        void onClick(View v);

    }
    //用于控件接收触摸事件
    public void getTouchEvent(){
        //调用监听者里面的Onclick方法
        listener.onClick(this);
    }
}

(四)、创建一个按钮类

public class Button extends View{
  String title;
  String titlecolor;
  public Button(String title,String titlecolor){
      this.title = title;
      this.titlecolor = titlecolor;
  }
}

(五)、主函数

public class MyClass {
    public static void main(String[] args){
        //启动程序创建界面
        MainActivity main = new MainActivity();
        //模拟触摸
        main.touch();
    }
}

今日收获:

抽象类与接口就概念而言很容易懂,但是放在一个具体的项目里面,它们具体能实现什么功能,如何实现,如何灵活地结合这是一个问题。这些天界面的跳转让我很晕,思维还停留在一步到底。今天又写了一个小实战,在朋友的帮助和借助debug一步一步的进行我才弄明白这一步步是在做什么,是如何实现的。都说好事多磨,我相信我现在的痛苦能换来以后的轻松。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他...
    洋芋掉到碗里去了阅读 2,701评论 0 0
  • 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。接口...
    Q南南南Q阅读 2,895评论 0 3
  • 一、抽象类 1、抽象方法 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体...
    blueizz阅读 1,607评论 0 0
  • 原来我只知道一个类可以实现多个接口,但只可以继承一个抽象类,但并不能清楚地认识到它们的区别及使用的场景。 在查阅不...
    n油炸小朋友阅读 1,445评论 1 0
  • 腾讯马化腾,成功的特质 来自专栏鉴峰笔记 鉴峰自我管理 [连续签到第164天] 2018-6-21 周四 鉴峰笔记...
    鉴峰笔记阅读 4,400评论 0 0

友情链接更多精彩内容