Java Static、abstract的应用
静态类Static
案例一:
package com.oop.demo08;
public class Student {
private static int age;//静态的变量 多线程!
private double score;//非静态的变量
public void run(){
go();//非静态方法可以直接调用访问静态方法,而静态方法不能直接访问调用非静态方法里面的东西
}
public static void go(){
// run();//非静态方法可以直接调用访问静态方法,而静态方法不能直接访问调用非静态方法里面的东西
}
public static void main(String[] args) {
// run();//非静态方法可以直接调用访问静态方法,而静态方法不能直接访问调用非静态方法里面的东西
Student s1 = new Student();
//new一个对象,相当于更那个类一样,而且是一模一样
//即S1 和Student这个类一样,有Student里面所有的东西,并且可以直接用,只是名字为s1而已。
System.out.println(Student.age);
System.out.println(s1.age);
System.out.println(s1.score);
//非静态方法可以直接调用访问静态方法,而静态方法不能直接访问调用非静态方法里面的东西
// System.out.println(Student.score);这个score爆红是因为上面定义的score不是static静态的
//对象点方法
new Student().run();//因为run不是在这个类里面,所以要调用时需要对象点方法进行调用
Student.go();//go();//而go这个方法是static 静态的,可以直接调用,不用new。
}
}
运行结果:
0
0
0.0
案例二:
package com.oop.demo08;
//如果Person前面加了final,那么他就没有办法在被继承了,相当于断子绝孙了。
public class Person {
{
System.out.println("匿名代码块");
//代码块(匿名代码块)可以用来赋初始值
}
//1.static只执行一次,而且是第一个执行 和类一起创建的。
static{
System.out.println("静态代码块");
//静态代码块
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();//创建对象
System.out.println("==========");
Person person2 = new Person();
}
}
运行结果:
静态代码块
匿名代码块
构造方法
==========
匿名代码块
构造方法
抽象类abstract
实例代码:
package com.oop.demo09;
public abstract class Action {
//约束 java 是单继承,没有多继承 (但接口可以实现多继承)
//abstract,抽象方法,只有方法名字,没有方法的实现!
public abstract void doSomething();
//1.不能new这个抽象类,只能靠子类去实现它。
//抽象类可以写普通的方法
//抽象方法必须在抽象类中
public void hello(){
}
}
package com.oop.demo09;
//子类继承父类,必须重写父类中的方法
//抽象类的所有方法,继承了它的子类,都必须要实现它的方法,除非子类也是abstract。
//例如:public static class A extends Action{}那就不要再实现它的方法
public class A extends Action {
@Override
public void doSomething() {
}
}