学习目的
复习之前类里面的构成后,有继续复习了成员变量、构造方法和方法,重新开始学习新的知识:代码块、内部类、继承和多态。
相关技术、及其使用
代码块:
在对象创建之前就会优先被调用
格式:
修饰符{
预先执行的内容
}
类里面可以有多个代码块,执行顺序和出现的先后顺序相同,尽量不要再类里面写多个代码块,静态代码块里面不能调用成员变量和实例方法。 例如:
class Person{
int age ;
{
age = 20;
System.out.println("代码块 age = " +age);
}
static {
System.out.println("静态代码块优先被执行");
}
public Person(){
System.out.println("默认的无参构造方法");
}
public Person(int ager){
this.age = age;
System.out.println("有参构造方法");
}
}
定义一个类可以在多个地方定义:
1、单独创建一个文件管理类
2、直接在文件里面类的上面和下面创建
3、直接在没某个类内部创建一个类
一个类依附于另一个类。
静态内部类不能调用类外部属性,而普通内部类就可以调用,外部类访问内部类就需要创建一个内部类的对象才能访问。
例如:
class RelativeLayout {
String view;
LayoutParams layoutParams;
//在显示一个视图前 必须告诉系统这个视图的位置
public void show(float left,float right,float top,float bottom){
layoutParams =new LayoutParams(left,right,top,bottom);
System.out.println("视图" + view + "显示出来了");
System.out.println("left:" + left + "top:" + top + "right:" + right + "bottom:" + bottom);
}
/**
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 class LayoutParams {
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin, float topMergin, float rightMergin, float bottomMergin) {
this.bottomMergin = bottomMergin;
this.leftMergin = leftMergin;
this.rightMergin = rightMergin;
this.topMergin = topMergin;
}
}
}
封装性:用类来封装属性和方法,通过里面的访问权限private、protected、public来进行访问
继承(extends)
为什么要继承
获得父类的方法和属性,并且需要添加自己的属性和方法,Java里面只能单继承,但是可以变相多继承。
注:所有的类都是直接或间接继承于 Object类,当调用子类的方法时,如果没有就到父类里面去找,如果在子类里面需要调用父类的方法,显示调用父类的属性 就使用super()。
什么情况下需要在一个方法里面调用super的对应方法?
public voidwalk(){
super.walk;
}
如果一个方法需要完成一个功能 ,又不能单独完成 必须要弗雷作相应的工作:
1、父类做完之后 子类在操作
2、子类做点事情之后 ,在调用父类操作 如果子类里面需要重新实现父类的方法 就需要重写
@override
如果父类有自定义构造方法子类的构造方法里必须显示调用父类的构造方法,如果父类有内部类 子类中有同名的内部类 那么父类中的内部类就被屏蔽了, 如果非要使用父类中了内部类只能使用全类名 (完整路)如:Person.inners
多态 polymorphic(类行的自动向上转换):
1、同一个方法 在不同的子类中有不同的实现(同一个方法多种实现)
2、如果有继承关系:子类的对象可以使用父类变量接收
例如:
class A{
public void info(){
System.out.println("in A");
}
}
class B extends A{
@Override
public void info(){
System.out.println("in B");
}
}
class C extends B{
@Override
public void info(){
System.out.println("in C");
}
}
心得体会
今天更进一步的学习了Java里面的语言知识,了解到了内部类和静态内部类的区别,同时还学到了如何继承。但是唯一有点美中不足的是, 对多态还是有点模糊,今天,我们开始了晚自习,这个感觉还是挺好的,比起以前更多了一些学习的时间。