Android Day11
感想
今天宿舍停电了,中午热的不行,中午在教室休息,没有休息好,状态不是很好,可能学习效率不是多高,自己要回顾一下这些内容,而且感觉听懂了,但是记不住,回过头来看的时候还是有种恍然大悟的感觉,应该就是之前基础没有打好把,所以尚需努力
内容
ⅠJava中的代码块
ⅡJava中的内部类
ⅢJava中的封装
ⅣJava中的继承
ⅤJava中的多态
具体内容
ⅠJava中的代码块
1.定义
一个{ }就是一个代码块
即修饰符{预先执行的内容}
2.类型
代码块分为普通代码块、静态代码块、同步代码块、构造代码块
(1)普通代码块是我们用得最多的也是最普遍的,它就是在方法名后面用{}括起来的代码段。普通代码块是不能够单独存在的,它必须要紧跟在方法名后面。同时也必须要使用方法名调用它
(2)静态代码块就是用static修饰的用{}括起来的代码段,它的主要目的就是对静态属性进行初始化,注意静态代码块里面不能调用成员变量和实例方法
(3)使用 synchronized 关键字修饰,并使用“{}”括起来的代码片段,它表示同一时间只能有一个线程进入到该方法块中,是一种多线程保护机制
(4)在类中直接定义没有任何修饰符、前缀、后缀的代码块即为构造代码块,需要注意构造代码不是在构造函数之前运行的,它是依托构造函数执行的
3.类里面可以有多个代码块
代码块的执行顺序和出现的先后顺序相同 但是代码块写在哪里都会比其他提前调用
若有重复 后面内容会覆盖前面的内容
尽量不要在类里面写多个代码块
ⅡJava中的内部类
1.定义
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类
2.类型
内部类有成员内部类、局部内部类、匿名内部类和静态内部类四种
(1)成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
  外部类.this.成员变量
  外部类.this.成员方法
(2)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内,且不能有public、protected、private以及static修饰符
(3)匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护,匿名内部类是唯一一种没有构造器的类,正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调
需要注意的是匿名内部类也是不能有访问修饰符和static修饰符
(4)静态内部类是不需要依赖于外部类的,并且它不能使用外部类的非static成员变量或者方法
下面为内部类的实例
class Person1 {
String name;
int age;
public Person1(String name, int age) {
    this.name = name;
    this.age = age;
}
public void walk() {
    System.out.println(name + "人走路");
}
public void eat() {
    System.out.println(name + "人吃饭");
}
public class inners {
    public void show() {
        System.out.println("Person inner");
      }
   }
}
3.如果父类有内部类,子类中有同名的内部类,那么父类中的内部类就被屏蔽了,如果非要使用父类中的内部类 只能使用全类名命名
ⅢJava中的封装
1.定义
将抽象性函式接口的实现细节部份包装、隐藏起来的方法,最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段
ⅣJava中的继承
1.定义
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
2.实现继承的关系,可以使用如下的语法:
  class 子类 extends 父类 {}
子类又被称为派生类; 父类又被称为超类(Super Class)
3.继承的具体例子
   class Person {
   private String name;
   private int age;
   public void setName(String name) {
    this.name = name;
   }
    public void setAge(int age) {
    this.age = age;
   }
    public String getName() {
    return this.name;
    }
    public int getAge() {
    return this.age;
     }
   }
     class Student extends Person { 
    // Student类继承了Person类
   } 
    public class TestDemo {
    public static void main(String args[]) {
    Student stu = new Student(); // 实例化的是子类
    stu.setName("张三"); // Person类定义
    stu.setAge(20); // Person类定义
    System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
       }
   }
4.注意Java之中只允许多层继承,不允许多重继承,Java存在单继承局限
super调用父类构造时,一定要放在构造方法的首行上,使用如下
 public void walk(){
     super.walk()
  }
ⅤJava中的多态
1.定义
多态是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口,使用不同的实例而执行不同操作
2.重写override
方法的重写,也就是子类能够重写父类的方法,当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法,要想调用父类中被重写的方法,则必须使用关键字super
实例
@Override
public void walk() {
    super.walk();
}
@Override
public String toString() {
    return "Student " + "name=" + name;
}
3.多态的实例
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");
    }
  }