Java学习之面向对象编程-3
static关键字详解
1.静态属性与非静态属性
package com.oop.demo08;
public class Student {
public int age;//非静态属性
public static String name;//静态属性
public static void main(String[] args) {
Student s = new Student();
//非静态属性需要new 一个对象才能调用
System.out.println(s.age);
//静态属性可以直接用类调用
System.out.println(Student.name);
}
}
2.静态方法与非静态方法
package com.oop.demo08;
public class Student {
public void run(){//非静态方法
}
public static void go(){//静态方法
}
public static void main(String[] args) {
Student s = new Student();
s.run();//需要实例化对象后才能调用非静态方法
Student.go();//用类直接调用
go();//本类中直接写方法
}
}
3.静态代码块
类一加载直接执行,最早
只执行一次
package com.oop.demo08;
public class Person {
{
//匿名代码块:用来赋初始值
System.out.println("匿名代码块");
}
static {
//静态代码块,类一加载直接执行,最早,只执行一次
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person p=new Person();
System.out.println("=========");
Person p2=new Person();
}
}
执行结果
静态代码块
匿名代码块
构造方法
=========
匿名代码块
构造方法
4.导入包
package com.oop.demo08;
//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {
public static void main(String[] args) {
System.out.println(Math.random());//不导入包时,需要用类.方法 来调用方法
System.out.println(random());//导入包时,直接调用方法
System.out.println(PI);
}
}
注意:当类有final修饰符时,不能被继承
抽象类
1.抽象类、抽象方法的关键词:abstract
package com.oop.demo09;
//抽象类
public abstract class Action {
//抽象方法:只有方法的名字,没有方法的实现
public abstract void go();
}
2.A类要继承抽象类Action
-
重写实现抽象类的方法
package com.oop.demo09;
public class A extends Action{
-
A也成为抽象类,A、Action的方法由继承A的子类实现
package com.oop.demo09;
public abstract class A extends Action{
}
}
3.抽象类的特点
01.不能new这个抽象类,只能靠子类去实现它 Action' is abstract; cannot be instantiated
02.抽象类中可以写普通方法
03.抽象方法必须写在抽象类中
04.抽象类只能被继承
4.抽象类存在构造器吗?
每个类,包括抽象类,都必须有一个构造函数
对象是构造的,不调用构造函数就不能建立一个新的对象
5.抽象类存在的意义
接口
1.接口:只有规范,定义的是一组规则
声明接口的关键字:interface
package com.oop.demo10;
//接口
public interface UserService {
//接口中定义的方法默认为 public static final
int age=99;
//接口中的方法不能写实现
//接口中定义的方法默认为 public abstract
void add(String name);
}
2.接口的继承 implements
package com.oop.demo10;
public interface TimerService {
void timer();
}
package com.oop.demo10;
//类可以实现接口 implements 接口,但要重写接口的方法
public class UserServiceImpl implements UserService,TimerService{//接口可以实现多继承
3.接口的作用
01.定义一些方法,让不同的类实现
02.接口中定义的方法默认为 public static final
03.接口中定义的方法默认为 public abstract
04.接口没有构造方法,因此不能被实例化
05.implements 可以实现继承多个接口
06.在类中implements接口时,必须重写接口的方法
找了篇更能加深理解的博客:

浙公网安备 33010602011771号