static
//Static
public class Student {
private static int age; //静态变量
private double score; //非静态变量
public void run(){
System.out.println("run");
go(); //非静态的方法 可以调用静态方法
}
public static void go(){
System.out.println("go");
}
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); //需要创建对象访问
s1.run(); //对象.方法
Student.go(); //类.方法 static
}
}
public class Person {
//2 附初始值 匿名代码块
{
System.out.println("匿名代码块");
}
//1 静态方法只执行一次
static {
System.out.println("静态代码块");
}
//3
public Person() {
System.out.println("person 构造方法");
}
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("===========");
Person p2 = new Person(); //无静态代码块
}
}
静态代码块 //只在第一执行
匿名代码块
person 构造方法
===========
匿名代码块
person 构造方法
package com.oop.deom08;
//静态导入包
import static java.lang.Math.random;
public class Test {
public static void main(String[] args) {
System.out.println(random()); //静态导入包后可以直接调用
}
}
创建类时 添加final 则无法被继承
抽象类
- abstract修饰符可以用来修饰方法也可以修饰类 如果修饰方法 那么改方法就是抽象方法 如果修饰类 那么该类就是抽象类
- 抽象类中可以没有抽象方法 但是有抽象方法的类一定要声明为抽象类
- 抽象类 不能使用new关键字来创建对此昂 它是用来让子类继承的
- 抽象方法 只有方法的声明 没有方法的实现 它是用来让子类实现的
- 子类继承抽象类 那么久必须要实现抽象类没有实现的抽象方法 否则该子类也要声明为抽象类
//abstract抽象类
public abstract class Action {
//约束-有人帮我们实现
//abstract 抽象方法 只有方法名字 没有方法的实现
public abstract void doSomething();
//1 不能new这个抽象类 只能靠子类去实现它 约束
//2 抽象类中可以写普通的方法
//3 抽象方法必须在抽象类中
//抽象的抽象 : 约束
}
//抽象类的所有方法 继承了它的子类 都必须要实现它的方法
public class A extends Action {
@Override
public void doSomething() {
}
}
接口
- 普通类 : 只有具体实现
- 抽象类 : 具体实现和规范(抽象方法)都有
- 接口 : 只有规范
- 接口就是规范 定义的是一组规则 体现了现实时间中"如果你是…则必须能…"的思想
- 如果你是天使 则必须能飞
- 如果你是汽车 则必须能跑
- 如果你是好人 则必须干掉坏人
- 如果你是坏人 则必须欺负好人
- 接口的本质是契约 就像我们人减的法律一样 指定好后大家都遵守
- oo的精髓 是对对象的抽象 最能体现这一点的就是接口 为什么我们讨论设计模式都只针对具备了抽象能力的语言 就是因为设计模式的所研究的 实际上就是如何合理的去抽象
声明类的关键字是class 声明接口的关键字是interface
作用
- 约束
- 定义一些方法 让不同的人实现
- 接口中定义的方法都是public abstract
- 定义的变量都是常量 public static final
- 接口不能被实例化 接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法
package com.oop.demo10;
//interface定义关键字 接口都需要有实现类
public interface UserService {
//接口中的所有定义其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
//常量 public static final
public static int AGE=99;
}
public interface TimeService {
void timer();
}
package com.oop.demo10;
//抽象类 extends 只能单继承
//类 可以实现接口implement接口
//实现了接口的类 就需要重写接口中的方法
//多继承-利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService {
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}