抽象类 接口
目的
1.了解抽象类的基本概念
普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。
那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。
而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。
抽象类相当于一个模板。
2.明白什么是接口
定义一套方法 用于对象之间的通信
不要把接口理解为某一个物理存在的东西
接口就是定义一套规则/ 规范
技术
- 如何定义一个抽象类
- 怎么来使用一个抽象类
- 什么情况下需要创建一个抽象类
1.不能直接创建这个类的对象
2.这个类里面的某些方法 还不确定如何实现 - 怎么定义一个接口
- 如何实现一个接口
技术实现
- 如何使用抽象类
定义一个抽象类 管理学习Android开发的路线
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 static final String CBOOK = "C Primier";
//定义一个抽象方法 不需要实现 子类来实现
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;
public void studyC(){
System.out.println("看书 看视频");
}
public Student(String name , String javaBook,String dream){
super(javaBook,dream);
this.name = name;
}
如果继承一个抽象类 就必须实现里面的抽象方法
@Override
public void StudyC() {
System.out.println("实现抽象方法");
}
抽象类无法被初始化
1.显示地创建一个类继承于抽象类 创建这个类的对象
Student xw = new Student("小王","java编程思想","拿offer");
}
2.使用匿名类 只使用一次
BaseAndroidStudy zs = new BaseAndroidStudy("java 书","高薪") {
@Override
public void StudyC() {
System.out.println("培训");
}
};
- 如何使用接口
定义一个接口,并在其中创建一个内部类
interface tetstInterface{
// public static final int I = 100;
int COUNT = 20;
void test(); //默认为抽象方法 且默认为public
//内部类默认为 static
class inner{
int name;
public void show(){
System.out.println("内部类");
}
}
}
再定义一个类来实现这个接口
class YXClass implements tetstInterface{
@Override
public void test() {
inner inner = new inner();
inner.show();
}
}
创建对象来调用接口中的方法
YXClass yx = new YXClass();
tetstInterface tetstI = new YXClass();
yx.test();
tetstI.test();
技术运用
使用抽象类和接口写一个创建简易界面的demo
import java.util.ArrayList;
public abstract class Activity {
//保存这个界面的所有子视图
ArrayList<View> childen = new ArrayList<>();
//创建一个界面
public abstract void onCreat();
//将子控件添加到当前界面上
//接收的时候是用父类去接收子类
//当需要访问子类内容的时候 就要强制转化为对应的类
public void addChild(View view){
if(view instanceof Button){
Button btn = (Button)view;
System.out.println(btn.title+"显示在界面上了");
}else {
if (view instanceof ImageView)
{ImageView img = (ImageView)view;
System.out.println(img.picture+"的图片显示在界面上了");}
}
//保存子类控件
childen.add(view);
}
//销毁一个界面
public abstract void onDestroy();
}
/**
* 创建按钮类
*/
public class Button extends View {
String title;
String titleColor;
public Button(String title,String titleColor){
this.title = title;
this.titleColor = titleColor;
}
}
**
* 显示一张图片
*/
public class ImageView extends View {
String picture;
public ImageView(String picture){
this.picture = picture;
}
}
public class MainActivity extends Activity implements View.onClickListener{
Button btn;
ImageView img;
public MainActivity(){
//当界面被创建就自动调用 onCreat方法
onCreat();
}
@Override
public void onCreat() {
//创建一个按钮
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 view) {
System.out.println("图片被点击了");
}
};
}
//模拟触摸
public void touch(){
//将屏幕触摸的事件传递给按钮
btn.getTouchEvent();
img.getTouchEvent();
}
@Override
public void onDestroy() {
}
//当事件触发了 就会来调用这个onClick方法
@Override
public void onClick(View view) {
if(view instanceof Button){
Button button = (Button)view;
System.out.println(button.title+"按钮被点击了");
}
}
}
/**
* 管理一个视图显示和事件监听
*/
public class View {
//所有视图都具有的共性
String backgroundColor;
String borderColor;
//记录谁想监听我这个事件
//暂时不确定谁需要被监听
//但是要监听事件的对象肯定实现了这个接口
onClickListener listener ;
//所有视图都需要监听事件
//定义内部接口 封装
interface onClickListener{
//定义一套方法 约束外部使用这些方法 来监听事件
void onClick(View view);
}
//用于控件接收触摸事件
public void getTouchEvent(){
//调用监听者里面的onClick方法
listener.onClick(this);
}
}
public static void main(String[] args){
//启动程序 创建界面
MainActivity main = new MainActivity();
//模拟触摸
main.touch();
}
}
运行结果QQ图片20190812210033.png
心得
今天在学习抽象类和接口的时候,我还觉得挺简单的,但是到后面写那个界面布局demo的时候,那个接口我感觉真的难。我已经看了三遍视频了,还是没能搞懂这个接口为什么是这样用。写这个代码我已经会写了,但对于其中主界面和视图通过接口交互的方式我还是不太懂。不过我感觉已经初窥门径了,以后学了更多东西自然就会明白了。