从零开始学java(二)类与对象

时间:2021-08-03 22:19:09

  面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

类是对象的抽象,对象是类的具体实例。

  1.构造一个类,让其拥有属性和方法

public class Employee {

    //属性,私有化属性,并提供方法让其能够通过方法访问
    private String name;
    private int age;
    private double salary;

    private static final int NUMBER=217; //常量

    private static void method1(){

        System.out.println("静态方法");
    }
    static{

        System.out.println("静态块");
    }

    //构造器
    public Employee(String name,int age,double salary){

        this.name=name;
        this.age=age;
        this.salary=salary;
        System.out.println("构造器");
    }

    public void raiseSalary(double multiple){
        this.salary *= multiple;
    }

    public static void main(String[] args) {

        Employee.method1();
    }
}

  类里面的内容加载顺序:

   1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化
   2、只有在调用new方法时才会创建类的实例
   3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行本类继承的子类的初始化块,最后是子类的构造方法
   4、类实例销毁时候,首先销毁子类部分,再销毁父类部分

  2.重载 overloading

  重载为多个方法具有相同的名字不同的参数;其实可以当做多个方法...

public String color(){
        return "red";
    }
public String color(String color){
        return color;
    }

3.public,private,protect ,“默认”的 作用域

    作用域 当前类 同一package 子孙类 其他package

    public       √          √           √            √

    protected √         √            √            ×

    friendly     √         √            ×            ×

    private     √         ×            ×             ×

  4.方法注释

    @param 变量描述; @return 返回描述 @throws 异常描述 @author 作者描述 @version版本描述 @deprecated 过时的

  5.类的设计技巧

    1.一定要让数据私有化

    2.一定要对数据进行初始化

    3.不要在类中使用过多的基本类型

    4.将类里过多的功能拆分出来

    5.类名和方法名应体现出职责

  6.类的继承

public class Employee {

    //属性,私有化属性,并提供方法让其能够通过方法访问
    private String name;
    private int age;
    private double salary;

    private static final int NUMBER=217; //常量

    private static void method1(){

        System.out.println("静态方法");
    }
    static{

        System.out.println("静态块");
    }

    //构造器
    public Employee(String name,int age,double salary){

        this.name=name;
        this.age=age;
        this.salary=salary;
        System.out.println("构造器");
    }

    public void raiseSalary(double multiple){
        this.salary *= multiple;
    }

}
    class Manager extends Employee{

        public Manager(String name, int age, double salary) {
            super(name, age, salary);
        }

}

  如果父类没有不带参数的构造器,那么子类必须重写父类的构造器。子类可以重写父类的方法,也可以添加新方法。相当于对父类进行扩充以适应其他的环境。

  子类只能继承一个父类。可以理解为 IS-A; 子类是父类。接口,可以理解为like-A。像A也可以像B。如果一个类被final修饰的话,将不能继承。例如String类。

  7.抽象类

    抽象类即带有抽象方法的类,用于被继承。抽象类中可以包含具体的方法。

abstract class Person{
        public abstract void eat();
        public void sleep(){

        }
    }