抽象類
抽象類 abstract 模板
模板的作用 模具-玩具(顏色不一樣 材質(zhì)不一樣)
1.主函數(shù)
BaseAndroidStudy 是Student的父類奸忽,可以用BaseAndroidStudy代替 Student xw=new Student中的Student
public class MyClass {
public static void main(String[]args)
{
//顯示創(chuàng)建一個子類 繼承抽象類 創(chuàng)建這個類的對象
BaseAndroidStudy xw=new Student("xiaow","book","xuexi");
xw.studyc();
//2.創(chuàng)建使用匿名類 只使用一次
BaseAndroidStudy zx=new BaseAndroidStudy("book","xuexi") {
@Override
public void studyc() {
}
};
}
}
2.抽象類
- 抽象方法不需要實現(xiàn)
- 定義一個抽象類 管理學(xué)習(xí)Android開發(fā)的路線
- 抽象類里面定義使用這個功能就必須實現(xiàn)的方法和屬性
abstract class BaseAndroidStudy{
//定義一個代碼塊
{
System.out.println("鍛煉身體");
}
//定義一個屬性用于保存數(shù)據(jù)
public String javaBook;
//定義一個靜態(tài)的常量
public static final String cBook="c 語言 基礎(chǔ) ";
//定義一個抽象方法 不需要實現(xiàn) 子類實現(xiàn)
public abstract void studyc();
//定義一個普通方法 已經(jīng)確定方法的具體實現(xiàn)
public void studyjava()
{
System.out.println("參見Java被訓(xùn)班");
}
public Dream dream;
public BaseAndroidStudy(String javaBook,String dream)
{
this.javaBook=javaBook;
this.dream=new Dream();
this.dream.name=dream;
}
//定義一個內(nèi)部類用于管理目標(biāo)夢想
private class Dream
{
public String name;
public void show()
{
System.out.println("我的夢想是"+name);
}
}
}
3.普通類
- 使用extents 繼承 BaseAndroidStudy
- 如果繼承一個抽象類 就必須在普通類里面實現(xiàn)抽象類的抽象方法
- 如果不實現(xiàn)抽象類 也可以把這個類定義為抽象類
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 定義一套(兩者之間相互轉(zhuǎn)換)方法 用于對象之間的通信
- 不要把接口理解為某個物理存在的東西
- 接口就是定義一套規(guī)則/規(guī)范
*接口里面默認(rèn)變量都是static final 常量
*默認(rèn)情況下不需要自己寫 public static final - 不能定義變量
- 接口里面不能定義代碼塊
- 接口里面不能定義構(gòu)造方法
- 接口里面不能添加普通/對象/實例方法
- 只有抽象方法
- 泣港,默認(rèn)就是public abstract
- 如果需要定義已經(jīng)有實現(xiàn)的方法
- 使用default
- 接口里面可以使用內(nèi)部類
- 使用implements 實現(xiàn)一個接口
- 一個類可以實現(xiàn)多個接口
- class Test implements Test2,Test1
- 一個接口可以繼承多個接口
- interface Test1 extends Test2
1.主函數(shù)
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.創(chuàng)建普通類
- 創(chuàng)建類用implements繼承接口Test1,Test2
- 實現(xiàn)接口中的抽象方法棉磨,注意同名方法是屬于Test1還是Test2
class Test implements Test2 ,Test1
{
@Override
public void test() {
Test1.inner in=new Test1.inner();
in.show();
}
@Override
public void test1() {
}
}
結(jié)果.png
抽象類和接口的混合使用
按鈕的實驗
1.主函數(shù)
- 創(chuàng)建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.創(chuàng)建抽象類Activity
- 用ArrayList 定義數(shù)組(不明確內(nèi)容數(shù)量)
- 定義 界面的創(chuàng)建和銷毀
- 定義addChild(View v)继蜡,將在界面上顯示內(nèi)容
public abstract class Activity {
//保存這個界面的所有子視圖
public ArrayList<View> childs=new ArrayList<>();
//界面的創(chuàng)建
public abstract void Oncreat();
//界面的銷毀
public abstract void Destory();
//將子控件添加到當(dāng)前界面上
//接受時 用父類去接收子類 當(dāng)需要訪問子類時 就要強制轉(zhuǎn)化為對應(yīng)得到類型
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
- 定義構(gòu)造方法 弦疮,執(zhí)行操作Oncreak()
- 定義操作觸摸 teach
- 執(zhí)行抽象方法Oncreak剧辐,和Destory
public class MainActivity extends Activity implements View.OnClickListener{
Botton bin;
public MainActivity()
{
Oncreat();
}
@Override
public void Oncreat() {
//主界面如何布局
//添加一個按鈕
bin=new Botton("分享","紅色");
//添加一個圖片
//將創(chuàng)建的控件添加的當(dāng)前界面
addChild(bin);
//告訴按鈕是誰監(jiān)聽這個事件
bin.listener=this;
}
//模擬觸摸
public void touch()
{
//將屏幕觸摸的事件傳遞給按鈕
bin.gettouch();
}
@Override
//銷毀之前需要做什么事情
public void Destory() {
}
//當(dāng)事件觸發(fā)了 就會來調(diào)用 onClick方法
@Override
public void onClick(View v) {
System.out.println("按鈕被點擊了");
}
}
4.定義一個類View
- 管理一個視圖顯示和事件監(jiān)聽
- 什么情況下需要將一個父類做成抽象類(模板)
- 1.不要直接創(chuàng)建這個類的對象
- 2.這個類里面的某些方法 還不確定如何實現(xiàn)
- 定義方法gettouch解恰,表示接觸事件
public class View {
//所有的視圖共有的屬性
String backgrountcolour;
String bordercolour;
//記錄誰想監(jiān)聽這個事件
//暫時不確定誰監(jiān)聽這個事件
//但是監(jiān)聽事件的人一定實現(xiàn)了這個接口
OnClickListener listener;
//所有的視圖都要監(jiān)聽事件
//如果一個事件需要監(jiān)聽事件 那么就必須實現(xiàn)監(jiān)聽事件的接口
//定義內(nèi)部接口 封裝
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.顯示結(jié)果
QQ截圖20190812192620.png
記錄代碼的測試時間
public class Test {
public static void main (String[] args)
{
mycode test=new mycode();
test.calculate();
}
}
abstract class TimeTemplate
{
//通過實現(xiàn)這個方法 獲得具體測量的代碼
public abstract void code();
//實現(xiàn)測量
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
感悟:對于新知識來講锋八,我始終認(rèn)為循環(huán)漸進(jìn)式的學(xué)習(xí)方式最好,學(xué)完之后先寫小程序熟悉如何使用护盈,從中找出沒有注意到的小細(xì)節(jié)挟纱,然后感覺差不多后在進(jìn)行大程序。今天我們寫了三四個小程序腐宋,但是大程序還是邏輯理不清紊服,一個個類分開可以知道是什么作用,但是合在一起就有點搞不清了胸竞。