面向对象的三大特征:

封装、继承、多态

一.封装:属性私有化,对外提供统一访问的get/set方法。完全封装。基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的。装类的出现,是为了更方便的使用一些基本类型不具备的方法,比如valueOf(),toString()等等。还有你如果想传递一个int对象的引用,而不是值,那只能用封装类。

public class Pet {
    int age;// 属性私有 封装的要求
    String name;
    // alt + shift + s
    public Pet(){
        this(20,"张飞");
    }
                          
    public Pet(int age,String name){
        this.age = age;
        this.name = name;
    }
                          
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
                          
    public void pritn(){
        System.out.println(this);
    }
}

二.继承:

Student(name,age,sid);

Teacher(name,age,tid);

Super(name,age);

继承的好处:

1. 代码的复用。

2. 为了以后多态的使用。

继承来的东西:

1. )一般的属性和方法被继承。

2. )构造方法不被继承。

3. )私有的方法不被继承。

4. )私有的属性被隐藏,可以通过继承来的公有方法访问。

什么时候建立父子类关系:

任何A出现的地方,换做B之后仍然成立,或者说:

B is a A : 如果符合这个公式,就可以建立父子类关系。

父类:

public abstract class Super {
    static{
        System.out.println("父类静态语句块");
    }
    public Super(){
        System.out.println("父类构造方法");
    }
    public abstract void test();
}

子类:

public  class Sub extends Super{
    static{
        System.out.println("子类静态语句块");
    }
    public Sub(){
        super();
        System.out.println("子类构造方法");
    }
    public void test(){
        System.out.println("实现");
    }
}

*.对于构造方法来说:

构造方法的第一行不是super(..)就是this(..)

如果一个构造方法第一行不是this(..)super(..),则默认是对父类无参构造的调用super();

不可能所有的构造都是this(..),至少有一个是super(..);

在子类中使用和父类中同样名字的属性没有意义,对实际开发没有任何好处,所以应该避免。

如果子类中有和父类名字相同的方法

1. 如果参数不同:构成了重载。

2. 如果参数相同:构成了重写。

重写:覆盖 覆写。

1. 发生在父子类中。

2. 同名同参同返回。

3. 子类方法的修饰符不能比父类方法的修饰符更封闭。(要么相同,要么更开放)

private默认protectedpublic

4. 子类方法抛出的异常不能比父类方法抛出的异常更宽泛。

重载:

1. 发生同一类中

2. 同名不同参。参数个数不同、参数顺序不同、参数类型不同均构成重载。

3. 返回值类型没有要求。

如果一个类没有指定继承其他父类,则它的父类是Object

this指本类对象。

super用法:指父类对象

三.多态:一个对象,多种状态。父类引用指向子类的对象

多态两点基本定理:

1. 发生多态时,只能调用父类的方法,不能调用子类的方法。

2. 发生多态时,如果子类中重写了父类的方法,再调用这个方法,调用的是子类重写之后的方法。

3. 想使用子类中独有的方法,需要使用强制类型转换

4. 注意:强制类型转换没有新建对象,只是换了一个引用。

对于静态方法来说,有重写,重写也应该是静态的。静态方法是跟类一致的,没有多态。

多态经常用传递的参数的类型和返回类型

public class Test {
    public static void main(String[] args) {
        Super s = new Sub();// 多态形式。
//      s.test();
        /*  静态>一般  父类>子类
         *  父类静态语句块
            子类静态语句块
            父类构造方法
            子类构造方法
         */
    }
}