一、概述
类是面向对象的核心,他是对事物的抽象。以人为例,人有形象,有动作。形象如一个脑袋,胳膊,腿。动作如跑步、休息。现在如果对人进行抽象,那么首先脑袋、胳膊、腿这些是硬件条件,也可以说是人的属性。而跑步、休息则是利用属性组合进行的肢体语言,属性组合的这个过程也可以说是方法。通常一个简单的类如下:
public class Persion{
private String head;//脑袋
private String leg;//腿
private String arm;//胳膊
//跑
public void run(){}
//睡
public void sleep(){}
}
构成一个类除以上以外还有 构造方法 、内部类、块。
构造方法可以初始化属性,也可以进行类实例化之前的初始准备。内部类则是在一些特殊场景下需要用到一个类,但这个类无需外界知道或使用。块可以是静态代码块也可以是构造代码块(不加 static ),在 JDBC 示例中,往往能看到在静态代码块中进行配置文件加载然后设置数据库连接属性。静态代码块在类被加载的时候就运行了,而且只允许一次,优先级最高,多个代码块会按自上而下的顺序执行。构造代码块在构造方法执行之前进行,每次创建对象都会被执行。
执行顺序:静态优先,父类优先,同类型自上而下执行。如类A,继承类B,则执行B静态-A静态-B成员变量+构造代码-A成员变量+构造代码-B构造器-A构造器。
二、类的种类
2.1、普通类
一个普通类形如:
public class Persion{
private String head;//脑袋
private String leg;//腿
private String arm;//胳膊
//跑
public void run(){}
//睡
public void sleep(){}
}
2.2、接口类
一个接口类形如:
public interface IAction{
//跑
public void run();
//睡
public void sleep();
}
2.3、抽象类
当接口类存在方法实现时,这就是抽象类(JDK1.8的default方法除外),形如:
public abstract class IAction{
//跑
public void run();
//睡
public void sleep(){}
}
2.4、枚举
一个枚举形如:
public enum Dic {
A,B,C,D,E;
}
2.5、注解
一个 注解 形如:
@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
//省略代码
}
2.6、内部类
内部为分为内部类、静态内部类和匿名内部类。
内部类形如:
public class Persion{
private String head;//脑袋
private String leg;//腿
private String arm;//胳膊
//跑
public void run(){}
//睡
public void sleep(){}
class Man{
private String eye;
}
}
静态内部类形如:
public class Persion{
private String head;//脑袋
private String leg;//腿
private String arm;//胳膊
//跑
public void run(){}
//睡
public void sleep(){}
ststic class Man{
private String eye;
}
}
匿名内部类形如:
public class Persion{
private String head;//脑袋
private String leg;//腿
private String arm;//胳膊
//跑
public void run(){
new IAction(){
//……
}
}
//睡
public void sleep(){}
}
三、类的父子关系
3.1、继承
java 是单继承,一个父可以有多个子,但是一个子只能有一个父。代码形如:
public class Man extends Persion{
//跑
public void run(){}
//睡
public void sleep(){}
class Man{
private String eye;
}
}
3.2、实现
java实现可以是多实现,代码形如:
public class Man implements IAction{
//跑
public void run(){}
//睡
public void sleep(){}
class Man{
private String eye;
}
}
四、方法的重载和重写
方法的重载指方法名一致,而参数和返回类型不同,比如 Spring -common包里的StringUtils的判空。而重写则是指子类方法签名和父类完全一致,相当于修改了父类的实现。