DAY12Java语言入门基础教学6抽象类、接口

抽象类

定义

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
PS 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

如何定义一个抽象类

//定义一个抽象类管理安卓开发学习路线
//抽象类里面定义使用这个功能就可以选择实现的方法或者属性
//抽象类不能实例化 不能创建抽象类的对象
abstract class BaseAndroidStudy{
//定义一个代码块
{
System.out.println("锻炼身体");
  }

//定义一个人属性 用于保存数据
public String javaBook;
public Dream dream;

//提供一个有参构造方法
public BaseAndroidStudy(String javaBook,String dream){
this.javaBook = javaBook;
this.dream = new Dream();
this.dream.name = dream;
  }

//定义一个静态常量
public final String CBOOK = "C Primer";

//定义一个抽象方法 不需要实现 子类来实现
public abstract void studyC();

//定义一个方法 已经确定了这个方法的具体实现
public void studyJava(){
System.out.println("参加培训");
  }

//定义一个内部类用于管理每个人的梦想
class Dream{
public String name;
public void show(){
System.out.println("my dream is"+name);
    }
  }
}

如何引用一个抽象类

/**使用一个抽象类
* 如果继承一个抽象类 就必须实现这个抽象类里面的抽象方法
* 如果不实现抽象方法 也可以把这个类定义为抽象类
*/
class Student extends BaseAndroidStudy{
String name;
@Override
public void studyC(){
System.out.println("read watch");
  }
public Student(String name,String bookname,String dream){
super(bookname,dream);
this.name = name;
  }
}

注意事项

  1. 抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象
  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
  4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

接口

定义

接口是对协定进行定义的引用类型。
格式:

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

特性

  1. 接口里面默认的变量都是static final
interface testInterface{
public static final int I = 100;
int COUNT = 20;
}

默认情况下不需要自己写 public static final

  1. 接口里面不能定义代码块,构造方法,普通/对象/实例方法
    接口里面只有抽象方法 默认就是public abstract
    接口里面可以有内部类 public static class
void test1();
public void test2();
public abstract void test3();
  1. 如果需要定义已经有实现的方法 使用default

接口的使用

public class xxxx implements 接口名称

接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法

DEMO

目的

J5I2KD4@80I%$R3R0NS726R.png

实现

  1. 管理界面的抽象类Activity定义
import java.util.ArrayList;
public abstract class Activity {
    public ArrayList<View>childs=new ArrayList<>();
    public abstract void onCreat();
    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);
    }
}
  1. 创建一个类View 管理视图显示和事件监听
public class View {
    String backgroundColor;
    String borderColor;
    onClickListener listener;


    public interface onClickListener{
        void onClick(View v);
    }
    //用于接收触摸事件
    public void getTouchEvent(){
        listener.onClick(this);
    }
}

3.创建主界面MainActivity

public class MainActivity extends Activity implements View.onClickListener{
    Button btn;
    ImageView img;
    //构造方法
    public MainActivity(){
        //当界面被创建就自动调用onCreate方法
        onCreat();
    }
    @Override
    public void onCreat(){
        //布局
        //添加一个按钮
        btn = new Button("share","red");
        //添加一张图片
        img = new ImageView("JayZhou");

        addChild(btn);
        addChild(img);

        //1.
        //如果一个控件需要监听事件 那么就必须实现监听事件的接口
        //告诉按钮是谁在监听事件
        btn.listener = this;
        //2.
        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(){

    }
    @Override
    public void onClick(View v){
        System.out.println("按钮被点击了");
    }
}
  1. 创建按钮对象Button
public class Button extends View{
    String title;
    String titleColor;

    public Button(String title,String titleColor){
        this.title = title;
        this.titleColor = titleColor;
    }
}
  1. 创建一张图片
public class ImageView extends View {
    String picture;
    public ImageView(String picture){
        this.picture = picture;
    }
}
  1. 外部使用
public class MyClass {
    public static void main(){
        MainActivity main =new MainActivity();
        main.touch();
    }
}

心得

感觉比昨天更能理解抽象类这些的了,但是少了一次睡懒觉的机会,血亏。在慢慢的看之前的内容,有种顿悟的感觉,很多之前不理解的东西现在要能接受一些了。我也好希望像范超凡一样自我感觉良好噢
图片.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,373评论 0 4
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,782评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,643评论 0 11
  • 有时候,我们已经够努力了,却还是看不到生活有所改变的迹象,内心就像陷入了一个迷宫,迷茫而焦虑。 爱因斯坦曾说:这个...
    开心文化阅读 1,336评论 5 30