继承的定义
继承就是子类继承父类的特征和行为,使子类对象(实例)具有父类的方法,或子类从父类继承方法,使得子类具有父类相同的行为。
注意:java只能实现单继承。
作用
描述类与类之间的关系,避免了类与类之间的重复代码;同时,继承自父类的子类可以使用父类非私有化方法和属性,子类可以重写父类的方法,但重写方法时需要注意:
1.返回值类型只能为父类的类型或者父类类型的子类,不能返回比父类方法返回值类型更大的类型;
2.子类重写父类方法的访问权限必须大于父类方法的访问权限;
3.子类不继承父类的构造函数,但可以通过super关键字调用父类的构造函数。
重写:方法名和参数相同,方法体不同。
实现继承
继承是怎么实现的呢?
这里用到了一个关键字“extends”,原义是延伸、拓展的意思。示例如下:
package com.extends01;
//父类
public class Father {
public String name;
private int id;
public int age;
public String gender;
public void study(){
System.out.println("hello sun");
}
}
package com.extends01;
//子类
public class Sun extends Father{
@Override
public void study() {
System.out.println("this is sun extends method");
// super.study();
}
public static void play(){
System.out.println("this is sun single method");
System.out.println("the sun can play games very good");
}
}
上面就是一个最基本的子类继承父类的例子。
final关键字
这里为什么单独讲到一个final关键字呢?
因为它比较重要,比如说我们有时候在查看别人代码的时候,有时候是没有办法对其代码做修改或者补充的,为什么呢?正因为别人的代码用final修饰过
final的意思是最终的,不可更改的;所以用final修饰的属性方法或者类都是不可更改或继承的。
来看看上面的父类用final修饰后的情况:
package com.extends01;
//父类
public final class Father {
public String name;
private int id;
public int age;
public String gender;
public void study(){
System.out.println("hello sun");
}
}
package com.extends01;
//子类
public class Sun extends Father{
@Override
public void study() {
System.out.println("this is sun extends method");
// super.study();
}
public static void play(){
System.out.println("this is sun single method");
System.out.println("the sun can play games very good");
}
}
此时是有错误的,来看看报什么错误:
The type Sun cannot subclass the final class Father
Sun不能是final修饰的类Father的子类。
抽象类
抽象类指用abstract修饰的、不能被直接实例化的类。
来看:
package com.extends01;
//抽象类
public abstract class AbsClass {
abstract void sleep();
}
package com.extends01;
//抽象类的实现类,必须重写父类的方法
public class AbsTrue extends AbsClass{
@Override
void sleep() {
// TODO Auto-generated method stub
}
}
package com.extends01;
//测试类
public class Test01 {
public static void main(String[] args) {
AbsTrue absTrue = new AbsTrue();
}
}
接口
因为java只能实现单继承,所以引入了接口;接口是interface,接口的实现使用关键字implement,在eclipse中,接口的创建有两种方式:
第一种:把class改为interface;
第二种:创建时选择interface就可以。
注意:接口中只有方法的声明,没有定义(没有方法体);默认情况下接口的属性由public static final修饰,方法由public abstract修饰。
接口的实现
代码如下:
package com.extends01;
//测试类
public class Test01 {
public static void main(String[] args) {
AbsTrue absTrue = new AbsTrue();
}
}
package com.interfacej;
//接口2
public interface Water {
public String feel = "cool";
public static void getWater(){
System.out.println("the boy is drinking water");
}
}
package com.interfacej;
//父类
public class Oxygen {
public String weight;
public static void getOxyen(){
System.out.println("the animal must be alive rely on oxyen");
}
}
package com.interfacej;
//这是继承了Oxygen并且实现了Sun和Water接口的类
public class Animal extends Oxygen implements Sun,Water{
}
上面就是一个简单的实现java继承和接口实现的空例,那么今天的分享就到这里了,谢谢!