1.继承:子类继承父类,只继承非private修饰的成员(成员变量和成员方法)
继承的优点提高了代码的复用性
class Animal /*extends Object*/{
private String name;//name被private 修饰不被 Sheep继承
public void eat(){
System.out.println("吃东西");
}
public String getName(){
return name;
}
public String setName(String name){
this.name=name;
}
}
class Sheep extends Animal{
//private String name; //Sheep中可以通过从父类继承的getter/setter方法来使用父类的name属性
//子类不用在重新定义name属性
// public void eat(){
// System.out.println("吃东西");
// }
}
注意事项:
1.Java只支持单继承(C++支持多继承)
2.所有类都直接或间接继承Object类
3.只有一个类没有父类就是Object类
2.方法的重写:前提条件一定得有继承关系
重写子类基于父类非private的方法,目的为了提供比父类的方法更强的功能
class Father{
public void goWork(){//上班
System.out.println("骑自行车上班");
}
private void method1(){
}
public void method2(int i){
}
public void method3(){
}
public Father method4(){
}
}
class Son extends Father{
@Override //强制重写父类的goWork()方法,没有重写就编译报错
public void goWork(){//上班
System.out.println("搭乘火箭去上班");
}
public void method(){//该方法属于Son特有的方法不是从父类继承
}
@Override
public void method1(){//private修饰的方法不能被继承,也不能被重写
}
@Override//强制要求重写
//如果去掉 @Override,继承method2(int) 与子类的 method2() 构成重载
public void method2(){ //参数列表不同不构成重写,编译报错
}
public int method3(){//返回值为基本数据类型不够成重写关系,也不构成重载关系,编译报错
return 0;
}
public Son method4(){//子类方法的返回值类型(Son)继承父类的方法的返回值类型(Father),也构成重写
}
}
重写与重载:
重载:
权限修饰符(public private 默认):无关
方法名:重载的两个方法的方法名必须相同
形参列表:
形参类型的顺序不同
形参的个数不同
形参的类型不同
三者至少满足一个
返回值类型:
重载与返回值类型无关
重写:
权限修饰符(public private 默认):
子类方法的权限>=父类的方法的权限
方法名:
子类方法和父类方法必须相同
形参列表:
子类方法和父类方法的形参列表必须相同
返回值类型:
基本类数据类型:
必须相同
引用数据类型:
子类方法的返回值类型和父类方法的返回值类型相同
或者
子类方法的返回值类型(Son) 是 父类方法的返回值类型(Father)的 子类
3.抽象类:
abstract class Shape{//Shape被abstract修饰无法new对象
public abstract double getArea();//由于形状不确定,我们无法利用公式求出形状的面积
//无法确定getArea()的方法体,因此把getArea()设计成抽象
}
class CircleShape extends Shape{
private double r;
private double pi=3.14;
@Override
public double getArea(){
return pi*r*r;
}
}
class TriangleShape extends Shape{
private double h;
private double di;
@Override
public double getArea(){
return 0.5*di*h;
}
}
抽象类的注意事项:
1.抽象类不能创建对象
2.含有抽象方法一定是抽象类
3.抽象类既可以含有抽象方法也可以含有非抽象方法
4.抽象类中可以没有一个抽象方法(应用:GUI的 适配器设计模式)
4.接口:是一种约束/规范(USB接口),额外功能拓展
abstract class Animal{
private String name;
public abstract void eat();
// public void swim(){//并不是所有的动物都会游泳
// System.out.println("游泳")
// }
}
interface Swim{//接口中的方法都是抽象方法
//游泳相对于动物继承体系来说是额外的功能
public abstract void swim();
}
class QingWa extends Animal implements Swim{
public void eat(){
}
public void swim(){
System.out.println("蛙泳");
}
}
class Dog extends Animal implements Swim{
public void eat(){
}
public void swim(){
System.out.println("狗刨");
}
}
class Bird extends Animal{
public void eat(){
}
}
注意事项:
1.类不能继承接口,接口可以继承多个接口
2.类不能继承多个类,但是类可以实现多个接口
3.接口中的方法都有public abstract
变量都有public static final ,改变量是一个常量,定义的时候就必须初始化
|
|