抽象类
定义
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
PS 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
如何定义一个抽象类
//定义一个抽象类管理安卓开发学习路线
//抽象类里面定义使用这个功能就可以选择实现的方法或者属性
//抽象类不能实例化 不能创建抽象类的对象
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 Primer";
//定义一个抽象方法 不需要实现 子类来实现
public abstract void studyC();
//定义一个方法 已经确定了这个方法的具体实现
public void studyJava(){
System.out.println("参加培训");
}
//定义一个内部类用于管理每个人的梦想
class Dream{
public String name;
public void show(){
System.out.println("my dream is"+name);
}
}
}
如何引用一个抽象类
/**使用一个抽象类
* 如果继承一个抽象类 就必须实现这个抽象类里面的抽象方法
* 如果不实现抽象方法 也可以把这个类定义为抽象类
*/
class Student extends BaseAndroidStudy{
String name;
@Override
public void studyC(){
System.out.println("read watch");
}
public Student(String name,String bookname,String dream){
super(bookname,dream);
this.name = name;
}
}
注意事项
- 抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
- 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
接口
定义
接口是对协定进行定义的引用类型。
格式:
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}
特性
- 接口里面默认的变量都是static final
interface testInterface{
public static final int I = 100;
int COUNT = 20;
}
默认情况下不需要自己写 public static final
- 接口里面不能定义代码块,构造方法,普通/对象/实例方法
接口里面只有抽象方法 默认就是public abstract
接口里面可以有内部类 public static class
void test1();
public void test2();
public abstract void test3();
- 如果需要定义已经有实现的方法 使用default
接口的使用
public class xxxx implements 接口名称
接口的多继承
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法
DEMO
目的
J5I2KD4@80I%$R3R0NS726R.png实现
- 管理界面的抽象类Activity定义
import java.util.ArrayList;
public abstract class Activity {
public ArrayList<View>childs=new ArrayList<>();
public abstract void onCreat();
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);
}
}
- 创建一个类View 管理视图显示和事件监听
public class View {
String backgroundColor;
String borderColor;
onClickListener listener;
public interface onClickListener{
void onClick(View v);
}
//用于接收触摸事件
public void getTouchEvent(){
listener.onClick(this);
}
}
3.创建主界面MainActivity
public class MainActivity extends Activity implements View.onClickListener{
Button btn;
ImageView img;
//构造方法
public MainActivity(){
//当界面被创建就自动调用onCreate方法
onCreat();
}
@Override
public void onCreat(){
//布局
//添加一个按钮
btn = new Button("share","red");
//添加一张图片
img = new ImageView("JayZhou");
addChild(btn);
addChild(img);
//1.
//如果一个控件需要监听事件 那么就必须实现监听事件的接口
//告诉按钮是谁在监听事件
btn.listener = this;
//2.
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(){
}
@Override
public void onClick(View v){
System.out.println("按钮被点击了");
}
}
- 创建按钮对象Button
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 MyClass {
public static void main(){
MainActivity main =new MainActivity();
main.touch();
}
}
网友评论