继承
1.概念:父类继承子类已有的属性和方法,并能衍生出新的能力
2.格式
class 子类 extends 父类 {}
3.代码举例
public class Animal {
String name.
String gender;
int age;
public void eat(){
System.out.println(name+"吃东西");
}
public void sleep(){
System.out.println(name+"在睡觉");
}
}
public class Dog extends Animal{
void bark(){
System.out.println(name+"旺旺~");
}
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.name);
System.out.println(dog.gender);
System.out.println(dog.age);
dog.eat();
dog.sleep();
dog.bark();
}
}
public class Cat extends Animal{
void mew(){
System.out.println(name+"喵喵~");
}
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.name);
System.out.println(cat.gender);
System.out.println(cat.age);
cat.eat();
cat.sleep();
cat.mew();
}
}
注意:成员变量的访问遵循就近原则,自己有就优先访问自己的
4.super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用(当前类)。
5.final关键字
.修饰类:表示类不能继承
.修饰方法,表示方法不能被重写
.修饰变量或字段,表示常量(即不能修改)
抽象类
1.概念
拥有抽象方法的类就是抽象类,但抽象类不一定要有抽象方法,抽象类要使用abstract关键字声明。
2.抽象类使用注意事项:
一个类如果定义为抽象类,那么里面可以没有抽象方法
一个类中如果有抽象方法,那么这个类必定是一个抽象类
抽象类不能被实例化,可以实例化非抽象子类的对象
抽象类的所有非抽象子类必须重写抽象类中的抽象方法
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
接口
1.概念
接口是一些方法特征的集合,一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成
,接口是解决Java无法使用多继承的一种手段
接口中的方法必须全部是抽象方法
2.格式
public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}
3.注意事项
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
(3)接口的对象可以利用子类对象的向上转型进行实例化。
抽象方法
抽象方法:使用abstract关键字修饰,可以省略,没有方法体,该方法供子类实现使用。
代码如下:
public interface InterFacehame {
public abstract void method();
}
默认方法和静态方法
默认方法:使用default 修饰,不可省略,供子类调用或者子类重写
静志方法:使用static 修饰,供接口直接调用。
代码如下:
public interface InterFaceNamo {
public default void method(){
// 执行语句
}
public static vold method2(){
// 执行语句
}
}
私有方法和私有静态方法
私有方法:使用private修饰,供接口中的默认方法或者静态方法调用。
代码如下:
public interface InterFaceName{
private void method(){
// 执行语句
}
}
多态
1.概念
指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
多态存在的三个必要条件
1.发生在继承或者实现接口的情况下
2.在子类中对方法进行了重写
3.父类引用指向子类对象 父类类型 变量名=new 子类对象()
2.多态的好处
在开发中可以把父类(接口类型)类型定义为方法的形参,在实际调用的时候转入的实际参数就比较灵活,可以传入父类类型的对象,也可以传入任意一个子类类型的对象
3.代码