extends 继承
当多个类中存在相同属性行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类就好了
this
this 表示当前对象,可以调用类的属性、方法和构造器
this本类上使用,。用于变量重名,强调变量是本类的。
this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
什么时候使用this呢?
局部变量和成员变量重名
super
super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类
有继承才能使用,子类重写父类的方法
如果一个类中没有写任何的构造方法,JVM会生成一个默认的无参构造方法。在继承关系中,由于在子类的构造方法中,第一条语句默认为调用父类的无参构造方法(即默认为super(),一般这句话省略了)。所以当在父类中定义了有参构造函数,都是没有定义无参构造函数时,IDE会强制要求我们定义一个相同参数类型的构造器。
static共享
关键字static (共享属性) 终点 只能调用静态
static 类型 名称
类.名称 =____
类变量(类属性)由该类的所有实例共享
静态方法可以调用静态对象
不能调用非静态成员变量和方法
static方法内部不能有this,也不能有super
abstract 用于修饰方法和类
抽象方法:不同类的方法是相似的,但具体内容又不太一样,所以我们只能抽取它的声明,没有具体的方法体的方法
抽象方法只能在抽象类里面
抽象类和抽象方法必须要用abstract修饰
抽象类不能创建对象(不能实例化)
抽象类可以声明对象,但是不能实例化对象
抽象类可以有非抽象的方法
抽象类和类的关系也是继承
关键字:final
与abstract不能共存
命名规则:全是大写,有多个加下划线
static final:全局常量 谁都可以用而且有final属性的 只能赋值一次,必须初始化,一旦初始化就不能改变
final标记的类不能被继承。String类、System类、StringBuffer类
final标记的方法不能被子类重写。Object类中的getClass()。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
final标记的成员变量必须在声明的同时或在每个构造方法中或代码块中显式赋值,然后才能使用。
(简单来说就是,要先定义,而且这个值只能被赋值一次,相当于在当前类里声明了一个常数,而且不能引用到其他类里面)
final class A{
}
class B extends A{
//错误,不能被继承。
}
//Final修饰的类不能被继承
class A{
public final void print(){
System.out.println(“A”);
}
}
class B extends A{
public void print(){ //错误,不能被重写。
System.out.println(“众软”);
}//final标记的方法不能被子类重写。
}
class A{
private final String INFO = “大哥”; //声明常量
public void print(){
//INFO = “二弟”;
}
}
接口 ==》扩展
接口(interface)是抽象方法和常量值的定义的集合。
用interface定义接口
interface Animal{
public abstract void eat();
}
用implements实现接口
class SubClass implements Animal{ }
接口和类的关系是实现,而且是多实现
接口与接口的关系是继承关系,而且是多继承
接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现也没有构造方法。
只能有抽象方法,不能创建对象
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认/只能是由public abstract修饰的。
接口没有构造器。
接口采用多层继承机制
实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。否则,仍为抽象类。
要实现多个接口,格式:先写extends,后写implements 可以多个接口 用逗号隔开
如果实现接口的类中没有实现接口中的全部方法,必须将此类定义为抽象类
接口也可以继承另一个接口,使用extends关键字
个人认为,接口就是扩展,把两个类需要的东西集成在一起,就能解决重复的代码了!
Object
object类是所有java类的根父亲 如果在类的声明中没有使用extends 关键字指明父类,则默认父类为object类,可以接收任何类型的
equals():所有类都继承了Object,也就获得了equals()方法。还可以重写。对比方法
只能比较引用类型,其作用与“==”相同,比较是否指向同一个对象
特例:当用equals()方法进行比较时,对类File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;原因:在这些类中重写了Object类的equals()方法。
== 是比较对象的地址 数据类型要一致
equals 不重写比的是地址。 重写:右键 + Source + Generate hasCode()...
equals对于String比较的是值