Android Java学习——继承关系、代码块、内部类

目的

今天的学习是关于继承关系、代码块和内部类的学习。具体的是完成了一个Person父类,借父类编码了一个Salary组,话不多说,开始今天的学习。

继承关系

在Java中,我们创建的一个类,再进行创建类时需要用到上个类的属性以及变量,可以使用继承来获得上个类的内容。继承的关键字是extants ,具体的使用方式为A extants B,A获得B的属性和变量/A继承B(A为子类,B为父类)。我们在使用是要注意,Java 中只存在单继承关系,要实现多继承只能变相完成,即A想继承B、C属性变量只能通过A继承B,而B继承C的方式完成。下面创建一个Person类为父类,用Students类为子类完成实践。

class Person{
    String name;
    int age;
    public void walk() {
    }
    public void eat() {
    }


}
class Students extends Person1{
    private int salary;

    @Override
    public String toString() {
        return "Salary{" +
                "hobby='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

代码块

  • 代码块是什么?
    代码块是一种常见的代码形式。他用大括号“{}”将多行代码封装在一起,形成一个独立的代码区,这就构成了代码块。
    普通代码块:是最常见的代码块,在方法里用一对“{}”括起来的数据,就是普通的代码块
    构造代码块:是在类中直接定义的,用“{}”括起来的代码。每次调用构造方法前执行,都会先执行构造代码块。
    静态代码块:他在类中的成员位置,用“{}”括起来的代码。只不过他用了static修饰了,,且执行一次
  • 代码块有什么用?
    简单的说,封装。把需要多次使用的属性和方法封装起来,使用时直接调用,或者设置在某些环境下的特殊功能

内部类学习

我们创建一个类之后,在类的内部在定义一个新的类。这个类就是内部类,这个类含有内部类的类称为外部类。内部类可以调用外部类的属性和变量,外部类不能直接使用内部类的东西。需要使用时要通过创建一个新的对象来间接使用。简单的说内部类就是 一个类定义在另一个类的内部
我们使用内部类的原因是:

  1. 一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
  2. 对于同一个包中的其他类来说,内部类能够隐藏起来。
  3. 匿名内部类可以很方便的定义回调。
  4. 使用内部类可以非常方便的编写事件驱动程序


    Android Java学习——继承关系、代码块、内部类_第1张图片
    image.png

设计一个简单的继承关系

要求:
Android Java学习——继承关系、代码块、内部类_第2张图片
image.png

具体代码为:

public class Person2 {
    protected String name;
    protected int age;

    public Person2(String name, int age){
        this.name = name;
        this.age = age;
    }

    public void walk(){
    }

    public void eat(){
    }
}

class CivilServant extends Person2{
    private int salary;
    private int count;

    public CivilServant(String name, int age,
                        int salary, int count){
        super(name, age);
        this.salary = salary;
        this.count = count;
    }

    @Override
    public void walk() {
        System.out.println("慢慢地走");
    }

    @Override
    public void eat() {
        System.out.println("大吃大喝");
    }


    public void cShow() {
        System.out.println("CivilServant{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                ", count=" + count +
                '}');
    }
}

class Worker extends  Person2{
    private int salary;
    private String tec;

    public Worker(String name, int age, int salary,
                  String tec){
        super(name, age);
        this.salary = salary;
        this.tec = tec;
    }

    @Override
    public void walk() {
        System.out.println("快跑呢");
    }

    @Override
    public void eat() {
        System.out.println("急匆匆吃");
    }

    public void wShow() {
        System.out.println( "Worker{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                ", tec='" + tec + '\'' +
                '}');
    }
}

class Test3{
    public static void main(String[] args){
//        Person[] peoples = new Person[6];
        ArrayList peoples = new ArrayList<>();

        Person2 c1 = new CivilServant("小王", 30, 5000, 30);
        Person2 c2 = new CivilServant("小李", 32, 7000, 34);
        Person2 c3 = new CivilServant("张三", 33, 2000, 32);

        //peoples.add((Person2)c1);
        peoples.add(c1);
        peoples.add(c2);
        peoples.add(c3);

        Person2 w1 = new Worker("Jack",23,8922, "Android开发");
        Person2 w2 = new Worker("Rose",22,10323, "iOS开发");
        Person2 w3 = new Worker("Merry",20,8123, "web开发");

        peoples.add(w1);
        peoples.add(w2);
        peoples.add(w3);

        for (Person2 p: peoples){
           //找到p到底是哪个类型的对象
            if(p instanceof CivilServant){
                //公务员
                CivilServant c = (CivilServant)p;
                c.cShow();
                c.walk();
                c.eat();
            }else{
                //员工
                Worker w = (Worker)p;
                w.wShow();
                w.walk();
                w.eat();
            }
        }
    }
}

你可能感兴趣的:(Android Java学习——继承关系、代码块、内部类)