抽象类 和 接口

抽象类

抽象类 abstract 模板
模板的作用 模具-玩具(颜色不一样 材质不一样)

1.主函数

BaseAndroidStudy 是Student的父类,可以用BaseAndroidStudy代替 Student xw=new Student中的Student


public class MyClass {
    public static void main(String[]args)
    {
        //显示创建一个子类 继承抽象类   创建这个类的对象
       BaseAndroidStudy xw=new Student("xiaow","book","xuexi");
       xw.studyc();
       //2.创建使用匿名类  只使用一次
        BaseAndroidStudy zx=new BaseAndroidStudy("book","xuexi") {
            @Override
            public void studyc() {

            }
        };

    }
}
2.抽象类
  • 抽象方法不需要实现
  • 定义一个抽象类 管理学习Android开发的路线
  • 抽象类里面定义使用这个功能就必须实现的方法和属性
abstract class  BaseAndroidStudy{
    //定义一个代码块
    {
        System.out.println("锻炼身体");
    }
    //定义一个属性用于保存数据
    public String  javaBook;
    //定义一个静态的常量
    public static final String  cBook="c 语言 基础 ";
    //定义一个抽象方法 不需要实现 子类实现
    public abstract void studyc();
    //定义一个普通方法  已经确定方法的具体实现
    public void studyjava()
    {
        System.out.println("参见Java被训班");
    }
    public  Dream dream;
    public BaseAndroidStudy(String javaBook,String dream)
    {
        this.javaBook=javaBook;
        this.dream=new Dream();
        this.dream.name=dream;
    }

    //定义一个内部类用于管理目标梦想
    private class Dream
    {
        public String name;
        public void show()
        {
            System.out.println("我的梦想是"+name);
        }
    }

}
3.普通类
  • 使用extents 继承 BaseAndroidStudy
  • 如果继承一个抽象类 就必须在普通类里面实现抽象类的抽象方法
  • 如果不实现抽象类 也可以把这个类定义为抽象类
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;
    }
}

接口

  • 接口 interface 定义一套(两者之间相互转换)方法 用于对象之间的通信
  • 不要把接口理解为某个物理存在的东西
  • 接口就是定义一套规则/规范
    *接口里面默认变量都是static final 常量
    *默认情况下不需要自己写 public static final
  • 不能定义变量
  • 接口里面不能定义代码块
  • 接口里面不能定义构造方法
  • 接口里面不能添加普通/对象/实例方法
  • 只有抽象方法
  • ,默认就是public abstract
  • 如果需要定义已经有实现的方法
  • 使用default
  • 接口里面可以使用内部类
  • 使用implements 实现一个接口
  • 一个类可以实现多个接口
  • class Test implements Test2,Test1
  • 一个接口可以继承多个接口
  • interface Test1 extends Test2
1.主函数
public class MyClass {
    public static void main (String [] args)
    {
        Test a=new Test();
        a.test();
    }
}

2.接口Test1
interface  Test1
{
    int i=100;
    int count =20;
    void test();
    class inner
    {
        int name;
        public void show()
        {
            System.out.println("suydafyfweuydf");
        }
    }
}

3.接口Test2 ,并使用extents继承接口Test1
interface  Test2 extends Test1
{
    int i=100;
    int count =20;
    void test();
    void test1();
    class inner
    {
        int name;
        public void show()
        {
            System.out.println("suydafyfweuydf");
        }
    }
}
4.创建普通类
  • 创建类用implements继承接口Test1,Test2
  • 实现接口中的抽象方法,注意同名方法是属于Test1还是Test2
class Test implements Test2 ,Test1
{

    @Override
    public void test() {

        Test1.inner  in=new Test1.inner();
        in.show();
    }

    @Override
    public void test1() {

    }
}
结果.png

抽象类和接口的混合使用

按钮的实验

1.主函数
  • 创建MainActivity类的变量main
  • 用变量main 使用MainActivity类中的方法teach
public class MyClass {
    public static void main( String[]args)
    {
        long start=System.currentTimeMillis();
      MainActivity main=new MainActivity();
      main.touch();
      long end=System.currentTimeMillis();
      System.out.println(end-start);
    }

}

2.创建抽象类Activity
  • 用ArrayList 定义数组(不明确内容数量)
  • 定义 界面的创建和销毁
  • 定义addChild(View v),将在界面上显示内容
public  abstract class Activity {
    //保存这个界面的所有子视图
    public ArrayList<View> childs=new ArrayList<>();
    //界面的创建
    public  abstract void Oncreat();
    //界面的销毁
    public abstract void Destory();
    //将子控件添加到当前界面上
    //接受时 用父类去接收子类  当需要访问子类时  就要强制转化为对应得到类型
    public  void addChild(View v) {
        if (v instanceof Botton) {
            Botton btn = (Botton) v;
            System.out.println(btn.titie + "按钮显示在界面上了");
            System.out.println(btn.titieColour + "按钮显示在界面上了");
        }
        //保存子控件
        childs.add(v);
    }
}

3.定义一个普通类MainActivity
  • 继承抽象类Activity ,继承接口View.OnClickListener
  • 定义构造方法 ,执行操作Oncreak()
  • 定义操作触摸 teach
  • 执行抽象方法Oncreak,和Destory
public class MainActivity extends Activity  implements  View.OnClickListener{
    Botton bin;

   public  MainActivity()
    {
        Oncreat();
    }
    @Override
    public void Oncreat() {
        //主界面如何布局
        //添加一个按钮
        bin=new Botton("分享","红色");
        //添加一个图片
        //将创建的控件添加的当前界面
         addChild(bin);

        //告诉按钮是谁监听这个事件
        bin.listener=this;

    }
    //模拟触摸
    public void touch()
    {
        //将屏幕触摸的事件传递给按钮
       bin.gettouch();
    }
    @Override
   //销毁之前需要做什么事情
        public void Destory() {

    }
   //当事件触发了  就会来调用 onClick方法
    @Override
    public void onClick(View v) {
        System.out.println("按钮被点击了");
    }
}

4.定义一个类View
  • 管理一个视图显示和事件监听
  • 什么情况下需要将一个父类做成抽象类(模板)
  • 1.不要直接创建这个类的对象
  • 2.这个类里面的某些方法 还不确定如何实现
  • 定义方法gettouch,表示接触事件
public class View {
    //所有的视图共有的属性
    String  backgrountcolour;
    String   bordercolour;
    //记录谁想监听这个事件
    //暂时不确定谁监听这个事件
    //但是监听事件的人一定实现了这个接口
    OnClickListener  listener;
    //所有的视图都要监听事件
    //如果一个事件需要监听事件  那么就必须实现监听事件的接口
    //定义内部接口  封装
    public  interface OnClickListener
    {
       //
        void   onClick(View v);
    }
    //用于控件接受触摸事件
    public  void gettouch()
    {
        listener.onClick(this);
    }
}
5.定义类Botten
public class Botton  extends View{
    String titie;
    String titieColour;

    public Botton(String titie,String titieColour)
    {
        this.titie=titie;
        this.titieColour=titieColour;
    }


}
6.显示结果
QQ截图20190812192620.png

记录代码的测试时间


public class Test {
    public static  void main (String[] args)
    {
         mycode test=new mycode();
         test.calculate();
    }
}
abstract class TimeTemplate
{
    //通过实现这个方法  获得具体测量的代码
    public  abstract void code();
    //实现测量
    public void calculate()
    {
        long state= System.currentTimeMillis();
        code();
        long end=System.currentTimeMillis();
        System.out.println(end-state);
    }
}
class mycode extends TimeTemplate {

    @Override
    public void code() {
        //写自己的代码
        int total =0;
        for(int i=0;i<10000;i++)
        {
            total=total+i;
        }
    }
}
QQ截图20190812194550.png

感悟:对于新知识来讲,我始终认为循环渐进式的学习方式最好,学完之后先写小程序熟悉如何使用,从中找出没有注意到的小细节,然后感觉差不多后在进行大程序。今天我们写了三四个小程序,但是大程序还是逻辑理不清,一个个类分开可以知道是什么作用,但是合在一起就有点搞不清了。

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

推荐阅读更多精彩内容