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