1. 类中变量的分类
1)局部变量:在方法中定义的变量
2)成员变量:类的属性
3)类变量:静态变量,用static修饰
2. 关于构造方法
每个类都有一个构造方法,没写的,默认有一个空的构造方法。同时,构造方法可以重载(同名但参数列表不同)。
3. 关于final
修饰类:该类无法被继承
修饰方法:该方法无法被覆盖或者说重写(子类自己再写一个相同的方法)
修饰属性:常量
4. 引用和对象实例
【类名】【对象名】 = new 【类名】();
其中,“【类名】【对象名】”只是创建了一个对象的引用,而“new 【类名】();” 才是在堆区中创建了对象。所以,
Object o1 = new Object(); Object o2 = o1; // 只是起了一个别名
以上操作并不会创建连个对象,而是两个引用指向了同一个对象。
5. 权限修饰符
权限 | 本类 | 同包 | 子类 | 其他 |
private | ● | |||
默认 | ● | ● | ||
protected | ● | ● | ● | |
public | ● | ● | ● | ● |
利用权限封装:先将属性用private修饰,然后使用创建相应的get和set方法。
6. 关于this
避免由于和成员变量重名而发生的冲突。
public class DemoClass { privated int x = 1; public void setX(int x) { this.x = x; } }
7. 关于继承
使用关键字extends父类,可以使用除privated外父类所有的属性和方法,同时子类还可以重写父类的方法。Java中的继承方式是单继承,同时引入接口interface弥补单继承的不足之处。
8. 关于super
1)访问父类的方法和属性时加用“super.XXX”;
2)调用父类的构造方法时,在子类的第一行添加“super()”方法。
9. 关于重载和重写
1)重载:同一个类中,方法名相同,但是参数列表相同;
2)重写:子类继承父类时,写一个和父类完全相同的方法,调用时,优先使用子类自己定义的方法。
10. 向上转型和向下转型
1)向上转型:父类对象引用指向子类对象,该引用不能访问子类独有的属性和方法,同时优先访问子类重写过的方法;
2)向下转型:创建一个子类的对象引用,并指向向上转型过的对象。
// 《菜鸟教程》的一个实例
public class Test { public static void main(String[] args) { show(new Cat()); // 以 Cat 对象调用 show 方法 show(new Dog()); // 以 Dog 对象调用 show 方法 Animal a = new Cat(); // 向上转型 a.eat(); // 调用的是 Cat 的 eat Cat c = (Cat)a; // 向下转型 c.work(); // 调用的是 Cat 的 work } public static void show(Animal a) { a.eat(); // 类型判断 if (a instanceof Cat) { // 猫做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } } abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void work() { System.out.println("看家"); } }
11. 抽象类
1)用关键字abstract修饰抽象方法和和抽象名;
2)抽象类可以包含普通方法,可以不包含抽象方法,但有抽象方法的一定是抽象类。
public abstract Demo{ public abstract void fun(){ } }
12. 关于接口
1) 不能用于实例化对象;
2) 接口中的方法有抽象方法(可以不加abstract修饰符,默认就是抽象方法)、default方法(加default修饰符,相当于类中的普通方法)和静态方法(调用时使用“【类名】.【方法名】”);
3) 成员变量是static final类型;
4)一个接口可以继承多个接口,一个类也可以使用多个接口。
13. 关于内部类
1)成员内部类:相当于一种特殊的成员变量;可以直接访问外部类的属性和方法,反之不行,遇到属性和方法相同时,优先用自己的,也可以借助this用外部的;无法拥有static属性和方法;
2)静态成员类(嵌套类):成员内部类用static修饰;
3)局部内部类:定义在方法和作用域内的内部类;
4)匿名内部类:没有名字的内部类,用于简化代码,只能用一次。