学习收获
不知不觉,Java学习已经俩个多星期了。收获有,但觉得不大,这几天学习的都说一些Java的知识,有理解的,也有懵比的,当然,懵比的时候比较多,这时候就只能听东哥代码跟着写罢了,很烦啊!不懂的的方还是不懂,这鸡儿难受。我们也太难了!牢骚到此,该说说今天的学习内容:Java接口还有抽象类实战
学习概况:
-
Java接口概念以及使用
-
抽象类学习以及实战
-
编写视图按钮窗口
过程
接口
-
1.接口概念
interface 接口名{
// 静态常量,抽象方法
}
用于对象之间的通信
-
2.接口的特点
(1)接口中只能放静态常量、抽象方法。
(2)java接口是对功能的扩展(父类和抽象类中一般都存放的是通用的属性和方法,我们一般把扩展的功能或特有的功能放到接口里,而不放在父类或抽象类中)。
(3)通过实现接口,java类可以实现多实现(一个类可以实现多个接口,即一个类可以有多种功能)。
(4)一个类只能继承一个父类,即extends关键字后面只能跟一个父类,但可以通过implements关键字实现,多个接口。
(5)接口与接口之间可以通过extends关键字来产生继承关系(即接口继承接口使用关键字extends)。
-
3.接口与抽象类的区别
(1)抽象类与实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类与子类在概念上应该是相同的。
(2)接口和实现类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。
(3)抽象类是对一组具有相同属性和行为的逻辑上有关系的事物的一种抽象,而接口是对一组具有相同属性和行为的逻辑上不相关的事物的一种抽象。
(4)对于接口和抽象类的选择,反映出设计人员看待问题的不同角度。抽象类用于一组相关的事物,表示的是"is-a"(继承)的关系,而接口用于一组不相关的事物,表示的是"like-a"(具备)的关系。
抽象类
昨天关于抽象类学习已经差不多了。
当你确定需要一个对象或者方法,但不清楚什么时候用到,但它确实是需要的,我们就可以定义抽象类完成。抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。
- 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法,抽象类的方法只能在子类中完成
- 抽象类不能被实例化
- 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类
实战
今天御用抽象类和接口完成了一个界面。具体如下
-
定义view类
/**
* 管理视图显示事件监听
* 什么情况下需要将一个父类做出成模板
* 1.不能直接创建这个类的对象、
* 2.这个类里面的某些方法 还不确定如何实现
*/
public class view {
//所有的视图都共有属性
String backgroundcolor;//背景色
String bordcolor;//边框色
//记录舰艇这个事件
//展示不确定谁要监听
//但是要监听世间的人肯定实现了这个接口
OnclickListener Listener;
//所有的视图都要监听事件
//定义一个内部接口 封装
public interface OnclickListener{
//定义一套规范 约束外部使用这些额方法来监听事件
void onClick(view v);
}
//模拟控件接收出没时间
public void getTouchuEvent(){
//调用监听这里面的Onclick方法
System.out.println("被点击了");
}
}
-
定义Butten类
/**
* 创建一个按钮类
*/
public class Butten extends view{
String title;
String titlecolor;
public Butten(String title,String titlecolor){
this.title=title;
this.titlecolor=titlecolor;
}
}
-
定义一个ImageView类
/**
* 显示一张图片
*/
public class ImageView extends view{
String picture;
public ImageView(String picture){
this.picture=picture;
}
}
-
定义Activity类
/**
* 管理界面的抽象类,顶贴以一个界面创建到结束的模板
*/
public abstract class Activity {
//保存这个界面的所有指示图
public ArrayList<view> childs=new ArrayList<>();
//界面创建
public abstract void onCreate();
//界面销毁
public abstract void onDestory();
//将子控件添加到当前界面上
//接收的时候是用父类区接收子类
//当需要访问子类内容是 就要羌之战换韦对应的类
public void addChild(view v){
if(v instanceof Butten){
Butten btn=(Butten)v;
System.out.println(btn.title+"按钮被添加到到界面上了");
}
if(v instanceof ImageView){
ImageView iv=(ImageView)v;
System.out.println(iv.picture+"的图片显示的图片");
}
//保存子控件
childs.add(v);
}
}
-
最后是MainActivity类的代码
/**
* 主界面
*/
public class MainActivity extends Activity{
Butten btn;
ImageView img;
//构造方法
public MainActivity(){
//当界面被船舰,立即调用onCreate方法
onCreate();
}
@Override
public void onCreate(){
//主界面如何布局
//添加一个按钮
Butten btn=new Butten("分享","红色");
//添加一张图片
ImageView img=new ImageView("周杰伦");
//将创建的控件添加到当前界面
addChild(btn);
addChild(img);
//1.
//如果一个按钮需要监听事件 bane必须实现监听事件的接口
//高数按钮谁在监听这个事件
btn.Listener;
//2.
//
img.Listener=new view.OnclickListener() {
@Override
public void onClick(view v) {
System.out.println("图片被点击了");
}
};
}
//模拟触摸
public void touch(){
//将屏幕被触摸的事件传递给按钮
btn.getTouchuEvent();
img.getTouchuEvent();
}
@Override
public void onDestory(){
}
public void onClick(view v){
System.out.println("按钮点击了");
}
}
结语
后面都好难啊,好多都是不太清楚的。先学一步是一步吧。到后面用多了就会明白吧