多态
即同一方法可以根据发送对象的不同而采用不同的行为方式(多态的意义)
一个对象的实际类型是确定的,但可以指向对象的引用可以有很多(一般指父类,有关系的类)
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
1、static 方法属于类,它不属于实例
2、final常量
3、private方法;类型转换
1、父类引用指向子类的对象
2、把子类转换为父类,向上转型,会丢失自己原来的一些方法
3、把父类转换为子类,向下转型,强制转换,才调用子类方法
4、方便方法的调用(转型),减少重复的代码,简洁。抽象:
封装、继承、多态
抽象类、接口static
静态变量可以直接用类名访问,也称类变量。
静态变量(或方法)对于类,所有对象(实例)所共享。
public class Student{ private static int age;//静态的变量 private double score;//非静态的变量 public void run2(){ } public static void sing(){ } public static void main(String[] args) { Student s1 = new Student(); System.out.println(Student.age); System.out.println(s1.age); System.out.println(s1.score); sing(); } }
- 静态区代码 加载类时一起被初始化,最早执行且只执行一次(第一次new)。
package kuangshen.demo04; public class Person { //2、赋初始值 { //代码块(匿名代码块) System.out.println("匿名代码块"); } //1、 static { //静态代码块,类加载直接执行,永久执行一次 System.out.println("静态代码块"); } //3、 public Person() { System.out.println("构造方法"); } public static void main(String[] args) { Person person1 = new Person(); System.out.println("================"); Person person2 = new Person(); } }
抽象类(abstract)
abstract修饰的类就是抽象类,修饰的方法就是抽象方法。
抽象类中可以没有抽象方法,但有抽象方法的类一定要声明为抽象类。
抽象类不能使用new来创建对象,它是用来让子类继承的。
抽象方法只有方法的声明,没有实现,让其子类实现。
子类继承抽象类,必须实现抽象类的所有方法,否则该子类也要声明为抽象类。
//abstract 抽象类:类 extends: 单继承(接口可以多继承) public abstract class Action { //约束~有人帮我们实现~ //abstract,抽象方法,只有方法名字,没有方法的实现! public abstract void doSomething(); }
//抽象类的所有方法,继承了它的子类,都必须要实现它的方法 public class A extends Action{ @Override public void doSomething() { } }