代码块
修饰符{
预先执行的内容
}
- 类里面可以有多个代码块,执行顺序和出现的先后顺序相同,尽量不要在一个类里写多个代码块
- 修饰符static 静态代码块中不能调用成员变量和实例方法
内部类
定义
将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类
分类
成员内部类
- 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
- 当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
- 外部类.this.成员变量
- 外部类.this.成员方法
在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。
- 内部类可以拥有 private 访问权限、protected 访问权限、public 访问权限及包访问权限。
局部内部类
- 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在2. 于局部内部类的访问仅限于方法内或者该作用域内。
局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。
匿名内部类
匿名内部类也是不能有访问修饰符和 static 修饰符的。
静态内部类
- 静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
创建方法
- 单独创建一个文件管理一个类
- 直接在文件里面 类A的上面和下面创建
- 直接在某个类A内部创建一个类
一个类A依附于另一个类B
class RelativeLayout{
String view;
public void show(LayoutParams layout){
System.out.println("视图:"+view+"显示出来了");
System.out.println("left:"+layout.leftMergin+
"top:"+layout.topMergin+
"right:"+layout.rightMergin+
"bottom:"+layout.bottomMergin);
}
public static class LayoutParams{
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin, float topMergin,
float rightMergin, float bottomMergin){
this.leftMergin = leftMergin;
this.topMergin = topMergin;
this.rightMergin = rightMergin;
this.bottomMergin = bottomMergin;
}
}
}
class testLayout{
public static void main(String[] args){
RelativeLayout rl = new RelativeLayout();
rl.view = "分享按钮";
//1.
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(20,20,
// 20,20);
// rl.show(params);
//使用匿名对象 只需要使用一次
rl.show(new RelativeLayout.LayoutParams(20,20,
20,20));
}
}
PS内部类尽量不要暴露给外部
继承 A extends B
作用
继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
class Person1{
String name;
int age;
public void walk(){}
public void eat(){}
}
class Student extends Person1{
int id;
String school;
}
- java只能单继承,变相多继承。
- 所有的类都是直接或间接继承Object类
- 当调用子类的一个方法是如果没有就去父类找
- 如果在子类需要调用父类的方法或者显示调用父类的属性和方法 用super
什么情况下需要在一个方法里面调用super对应的方法?
public void walk(){
super.walk();
}
如果一个方法需要完成一个功能,又不能单独完成,必须要父类作相应的工作,
- 父类做完之后子类再操作
- 子类做点事情之后 再调用父类去完成
如果子类里面需要重新实现父类的方法 就需要重写 @Override
多态polymorphic
- 同一个方法再不同子类中有不同的实现
- 如果有继承关系 子类的对象可以使用父类变量接收
类型的自动向上转换
体会
今天没有做特别长(比如扑克游戏)那样的demo,快乐。对于内部类的调用还是有点迷糊,打算再看看资料。
网友评论