JAVA学习记录(廖雪峰学习网站)

1、方法 class

class Person {
    public String name;
    public int age;
}

2、构造方法

当未定义构造方法时,默认为

class Person {
    public Person() {
    }}//没有参数也没有执行语句

当定义了构造方法后,Java就不会再提供默认的无参构造方法

如定义了一个带参数的构造方法,Person(String name, int age)。若在main函数里写

Person p = new Person();就会发生编译错误

就需要把两个构造方法都定义出来

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("Xiao Ming", 15); // 既可以调用带参数的构造方法
        Person p2 = new Person(); // 也可以调用无参数构造方法
    }
}

3、继承extends

已知存在person类(父类),构造student类(子类)继承于person:

class Student extends Person {

 注:

通过继承,Student只需要编写额外的功能,不再需要重复代码。

子类无法访问父类私有字段和方法

只允许单继承

4、多态

在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写

加上@Override可以让编译器帮助检查是否进行了正确的覆写

// override
public class Main {
    public static void main(String[] args) {
    }
}

class Person {
    public void run() {}
}

public class Student extends Person {
    @Override // Compile error!
    public void run(String s) {}
}

多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法

// Polymorphic
public class Main {
    public static void main(String[] args) {
        // 给一个有普通收入、工资收入和享受国务院特殊津贴的小伙伴算税:
        Income[] incomes = new Income[] {
            new Income(3000),
            new Salary(7500),
            new StateCouncilSpecialAllowance(15000)
        };
        System.out.println(totalTax(incomes));
    }

    public static double totalTax(Income... incomes) {
        double total = 0;
        for (Income income: incomes) {
            total = total + income.getTax();
        }
        return total;
    }
}

class Income {
    protected double income;

    public Income(double income) {
        this.income = income;
    }

    public double getTax() {
        return income * 0.1; // 税率10%
    }
}

class Salary extends Income {
    public Salary(double income) {
        super(income);
    }

    @Override
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }
        return (income - 5000) * 0.2;
    }
}

class StateCouncilSpecialAllowance extends Income {
    public StateCouncilSpecialAllowance(double income) {
        super(income);
    }

    @Override
    public double getTax() {
        return 0;
    }
}

观察totalTax()方法:利用多态,totalTax()方法只需要和Income打交道,它完全不需要知道SalaryStateCouncilSpecialAllowance的存在,就可以正确计算出总的税。如果我们要新增一种稿费收入,只需要从Income派生,然后正确覆写getTax()方法就可以。把新的类型传入totalTax(),不需要修改任何代码。

5、抽象类

抽象类

如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。

因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。

6、接口

如果一个抽象类没有字段,所有方法全部都是抽象方法:

abstract class Person {
    public abstract void run();
    public abstract String getName();
}
就可以把该抽象类改写为接口:interface

接口也可以继承

7、静态字段

static修饰的字段,称为静态字段:static field。所有实例都会共享该字段

无论修改哪个实例的静态字段,所有实例的静态字段都被修改了

静态方法

有静态字段,就有静态方法。用static修饰的方法称为静态方法。

调用静态方法则不需要实例变量,通过类名就可以调用

8、包

把各种类封装在包里

package ming; // 申明包名ming

public class Person {
}

引用其他包的class:

1)直接写出完整类名:

mr.jun.Arrays arrays = new mr.jun.Arrays();

2)用import语句,导入小军的Arrays,然后写简单类名:

package ming;
// 导入完整类名:
import mr.jun.Arrays;

public class Person {
    public void run() {
        // 写简单类名: Arrays
        Arrays arrays = new Arrays();
    }
}

3)import static的语法,可以导入一个类的静态字段和静态方法:

package main;

// 导入System类的所有静态字段和静态方法:
import static java.lang.System.*;

public class Main {
    public static void main(String[] args) {
        // 相当于调用System.out.println(…)
        out.println("Hello, world!");
    }
}

 

9、作用域


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值