Android开发Day12(2019-8-12)

目的

理解掌握抽象类和接口。

技术与对应的使用方法

1.抽象类的定义和使用


  抽象类  abstract
  模板的作用  模具 ->  玩具(颜色不一样  材质不一样)
             学习路线 -> C语言 -> Java -> 界面  网络  多线程  数据库
  架构师 展示层 逻辑层 数据层
             模块化{
             输出  Utils.showText
                GameCenter:start
                PokerManager deal dealCards  poker
                PlayerManager player
            }
           A -> 输出
           B -> GameCenter

public class MyClass {
    public static void main(String[] args){
        //BaseAndroidStudy study = new BaseAndroidStudy("java编程思想","来鹅厂培训拿鹅厂offer");
        //1.显示地创建一个类继承于抽象类  创建这个类的对象
        Student xw = new Student("小王","Java编程思想","来鹅厂培训拿鹅厂offer");

        //2.使用匿名类  只使用一次
        BaseAndroidStudy zs = new BaseAndroidStudy("java书","高薪") {
            @Override
            public void studyC() {
                System.out.println("培训");
            }
        };
    }
}
定义一个抽象类  管理学习安卓开发的路线
抽象类里面定义使用这个功能就可以选择实现的方法或者属性
抽象类不能实例化 不能创建抽象类的对象
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 premier";

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

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

    //定义一个内部类用于管理每个人的梦想
    class Dream{
        public String name;

        public void show(){
            System.out.println("我的梦想是:"+name);
        }
    }
}
使用extends来继承一个抽象类
如果继承一个抽象类 就必须实现抽象类里面的抽象方法
如果不实现抽象方法,也可以把这个类定义为抽象类
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;
    }
}

2.接口的定义和使用

接口 interface  定义一套方法  用于对象之间的通信
 
 不要把接口理解成某一个物理存在的东西 VGA TypeC
 接口就是定义一套规则/规范
                  5G 国外 华为
 一流的企业做定规范/标准  二流的企业做产品
 
 接口里面默认变量都是static  final  常量
 默认情况下不需要自己写public static final
 不能定义变量
 
 接口里面不能定义代码块
 
 接口里面不能定义构造方法

 接口里面不能添加普通方法/对象方法/实例方法
 只有抽象方法
 默认就是public abstract
 
 如果需要定义已经有实现的方法
 使用default

接口里面可以定义内部类
 
使用implements实现一个接口
  class TClass implements testInterface,testInterface1
 
  一个类可以实现多个接口
  一个接口可以继承多个接口
  interface testInterface extends test1, interface testInterface extends test
interface testInterface{
    int I = 100;
    int COUNT = 20;

    void test();

    class inner{
        int name;
        public void show(){
            System.out.println("内部类");
        }
    }
}

interface testInterface1{
    int I = 100;
    int COUNT = 20;

    void test1();

    class inner{
        int name;
        public void show(){
            System.out.println("内部类");
        }
    }
}

class TClass implements testInterface,testInterface1{

    @Override
    public void test() {

    }@Override
    public void test1() {

    }
}

class Te{
    public static void main(String[] args){
        TClass twj = new TClass();
        testInterface t = new TClass();
    }
}

实际使用

1.模拟图片(按钮)展示界面Demo

大体构造
运行MyClass
public class MyClass {
    public static void main(String[] args){
        //启动程序 创建界面
        MainActivity main = new MainActivity();

        //模拟触摸
        main.touch();
    }
}
管理界面的抽象类 定义了一个界面创建到结束的模板
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("按钮被点击了");
    }
}
管理一个视图显示和事件监听
什么情况下需要将一个父类做成抽象类(模板)
1.不能直接创建这个类的对象
2.这个类里面的某些方法 还不确定如何实现
public class View {
    String backgroundColor;
    String borderColor;

    //记录谁想监听我这个事件
    //暂时我不确定是谁要监听
    //但是要监听事件的人肯定实现了这个接口
    OnClickListener listener;

    //所有的视图都要监听事件
    //定义内部接口  封装
    public interface OnClickListener{
        //定义一套方法  约束外部使用监听这些方法来监听事件
        public abstract void onClick(View v);
    }

    //用于控件接收触摸事件
    public void getTouchEvent(){
        //调用监听者里面的onClick方法
        listener.onClick(this);
    }
}
显示一张图片
public class ImageView extends View{
    String picture;

    public ImageView(String picture){
        this.picture = picture;
    }
}
创建按钮类
public class Button extends View{
    String title;
    String titleColor;

    public Button(String title,String titleColor){
        this.title = title;
        this.titleColor = titleColor;
    }
}

运行结果

运行结果

2.创建一个可以方便地测出某个代码块的执行效率的模板

public class Time {
    public static void main(String[] args){
        MyCode m = new MyCode();
        m.calculate();
    }
}

/**
 * 希望能够创建一个模板
 * 使用这个模板可以方便地测出某个代码块的执行效率
 */

abstract class TimeTemplate{
    //通过实现这个方法  获得具体测量的代码
    public abstract void code();

    //实现测量
    public void calculate(){
        long start = System.currentTimeMillis();

        //测量的代码
        code();

        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

class MyCode extends TimeTemplate{
    @Override
    public void code() {
        //写自己的测试代码
        int total = 0;
        for (int i = 0 ; i < 100000 ; i++){
            total += i;
        }
    }
}

心得感悟

今天主要学了抽象类和接口,抽象类的具体使用还是懂了,但是接口还不是很清楚具体的使用方法。但通过这几天的学习,感觉自己对类、对象的理解要深刻了很多。不过我发现自己很多代码自己能够理解,但自己独立去写的时候又总感觉不熟悉。自己一定要在空闲时间多抽时间来敲代码。

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,103评论 1 32
  • 昨晚没有风,漫天的星星,像极了春天的夜晚。 和妈妈刚通完电话,眼珠里的泪水没有流出来,所以,我好像并没有得那种...
    开着拖拉机迎春阅读 140评论 0 0
  • 人与人相交, 若是懂得,何必多言, 若是不懂,又何必解释? 懂得的人无须解释, 不懂的人更是不必解释! 你从来都没...
    琳阳阅读 414评论 1 3
  • 年轻时, 觉得外边的世界 哪都比自己呆的地方温暖 觉得自已有能力 打开一片天 觉得自已有爱 在天涯海角都能发芽。 ...
    梦游的柔儿阅读 196评论 0 0
  • 2012-09-04 成长小组体验4 2012.8.18日盼望已久的成长小组第四课开始了。那天半晚时分开始下雨,吃...
    e0a0a643f902阅读 189评论 0 0