方法(函数)重载
  • 方法名一样,参数不一样,与返回值无关
  • 参数的个数不一样
  • 参数的类型不一样
  • 如果参数个数一样,类型也一样,但是顺序要不一样
  • 普通方法和构造方法都能重载
java内存(了解)
  • java的内存包含栈、堆、方法区、寄存器
  • 栈:先进后出,局部变量、方法都在栈中
  • 堆:new出来的对象就在堆
  • 两个引用(变量)指向同一个对象:Student s = new Student(); Student s2 = s;
封装(Encapsulation)
  • 将代码通过方法的形式将一些代码细节包装起来,防止外部代码的随机访问
  • 要访问这些数据就必须通过调用函数来完成
  • 三大特征都是为了少写代码、少修改代码
  • 好处:提高了代码的阅读性、提高了代码的可维护性
  • 体现:方法、对象、private get/set
  • get/set和构造方法都可以对成员变量进行赋值
继承(inherit)
  • java中的继承:两个类之间通过extends关键字来描述父子关系,子类便可拥有父类的非私有成员
  • 生活中的继承:子承父业
  • 解决问题:提高了代码复用性、代码的维护性更高
  • 语法:
    public class 父类 {
    }
    public class 子类 extends 父类 {
    }
  • 注意事项:
  • 如果一个类不继承任何类,默认继承Object, Object是java中的祖宗类
  • Java是单继承(一个类只能继承于一个类);多层继承,一个父类可以有多个子类
  • 创建本类对象之前会先初始化父类对象
  • 子类不能继承父类的private成员(属性,方法)
public class Car {
    String color;
    String brand;
    int wheel;

    /**构造方法定义和普通方法有区别
     * 没有返回值
     * 方法名和类名相同*/
    public Car(){
        System.out.println("Car无参构造");
    }
    /**方法重载:方法名一样,参数列表不一样(个数、类型)
     * 普通方法和构造方法都可以使用*/
    public Car(String color, String brand, int wheel){
        System.out.println("Car有参构造");
        //比如截取字符串函数substring
        //substring(int start)
        //substring(int start, int end)
        //局部变量和成员变量同名,就近原则(先从方法内部找变量,找不到再去类中找)
        //用this关键字解决问题,this.变量,强行去类中找变量
        this.color = color;
        this.brand = brand;
        this.wheel = wheel;
    }
    public void start(){
        System.out.println("启动");
    }
    public void stop(){
        System.out.println("停止");
    }
}
public class CarTest {
    public static void main(String[] args) {
        //创建对象
        //这里Car()调用的无参构造方法,用来创建对象(初始化、实例化)
        //构造方法特点:一个类中没有写构造方法时,java会提供一个默认的无参构造方法
        //如果写了任意构造方法,java就不提供
        //构造方法不能手动调用,只有new的时候才可以调用,一调用就创建了一个对象
        //普通方法可以反复调用,用来实现业务逻辑,构造方法用来创建对象
        Car c1 = new Car();
        //调用对象的属性
        c1.brand = "特斯拉";
        c1.color = "黑色";
        c1.wheel = 4;
        System.out.println(c1.brand);
        System.out.println(c1.color);
        System.out.println(c1.wheel);
        //调用对象的方法
        c1.start();
        c1.stop();

        //调用时通过方法名+参数确定唯一的方法
        Car c2 = new Car("白色", "保时捷", 4);
        System.out.println(c2.brand);
        System.out.println(c2.color);
        System.out.println(c2.wheel);
        c2.start();
        c2.stop();
    }
}
public class TwoObject {
    public static void main(String[] args) {
        //两个对象指向同一个地址值
        Car c1 = new Car("白色", "保时捷", 4);
        System.out.println(c1.brand);
        System.out.println(c1.color);
        System.out.println(c1.wheel);
        System.out.println("---------");
//        int a = 10;
//        int b = a; 基本数据类型
        //把c1的地址值赋值给c2,c1和c2两个对象指向同一个地址值
        Car c2 = c1;
        c2.brand = "法拉利";
        c2.color = "红色";
        System.out.println(c2.brand);
        System.out.println(c2.color);
        System.out.println(c1.brand);
        System.out.println(c1.color);
        System.out.println("---------");
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c1 == c2);
    }
}
public class Student {
    /**private,私有,只能本类内访问*/
    private int age;
    String name;

    /**利用get、set方法给private赋值*/
    public void setAge(int age){
        if(age >= 0 && age <= 120){
            //年龄有效,可以赋值
            this.age = age;
        }else{
            System.out.println("输入年龄无效");
        }
    }
    public int getAge(){
        return age;
    }

    public void study(){
        //可以访问age
        System.out.println(age);
    }
}
public class EncapsulationDemo {
    public static void main(String[] args) {
        //封装
        Student s1 = new Student();
        s1.name = "张三";
        //age为private,不能通过 s1.age = 19 赋值或取值
        //s1.age = 19;
        s1.setAge(19);
        s1.setAge(-100);
        System.out.println(s1.name);
        System.out.println(s1.getAge());
    }
}
public class Person {
    String name;
    int age;
    int sex;

    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("休息");
    }
}
public class Teacher extends Person{

    public void teach(){
        System.out.println("教书育人");
    }
}
public class InheritDemo {
    public static void main(String[] args) {
        //创建Teacher对象
        //当一个类继承父类,无条件使用父类非私有成员
        Teacher t = new Teacher();
        t.name = "语文老师";
        t.age = 50;
        t.eat();
        System.out.println(t.name);
        System.out.println(t.age);
        t.teach();
    }
}