Java类继承、方法重写与重载、抽象类和抽象方法以及接口

1.继承:父类和子类之间是层级结构关系,子类通过继承父类拥有父类的非private的属性和方法。提高了代码的复用性。
1)单继承:只能允许继承自一个父类;
2)子类可以扩展,即拥有自己的属性和方法;
3)子类可以重写父类的方法;
4)super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己的引用。
5)final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
6)子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。

2.方法的重写与重载
1)重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
2)重载:在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

3.抽象类和抽象方法
1)抽象类:不能实例化对象,必须有子类继承才能使用。抽象类并不一定含抽象方法。
2)抽象方法:拥有抽象方法的类,一定是抽象类。抽象方法只包含一个方法名,而没有方法体。子类必须重写实现该抽象方法。

4.接口:是抽象方法的集合,接口通常以interface来声明。
1)类描述对象的属性和方法。接口则包含类要实现的“抽象”方法。
2)接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
3)接口可以支持多继承。
4)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
5)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
6)一个类可以实现多个接口

普通类的继承的定义与使用:

package com.example.javatest;
/**
 * Author:W
 * 动物基类继承
 */
public class Animal {
    protected   String name;

    public  Animal()
    {

    }

    public Animal(String name)
    {
        this.name = name;
    }

    //子类方法重写:吃
    public void  eat(){}
    //子类方法重写:跑
    public  void  run(){}
}



package com.example.javatest;

/**
 * Author:W
 * 狗
 */
public  class  Dog extends Animal
{
    /*==============方法重载==========*/
    public Dog()
    {

    }

    public Dog(String name)
    {
        super(name);
    }

    /*==============方法重写==========*/
    @Override
    public void eat() {
//       super.eat();
        System.out.println("狗:"+name+" 在吃...");
    }

    @Override
    public void run() {
//        super.run();
        System.out.println("狗:"+name+" 在跑...");
    }
}

抽象类的继承定义与使用:

package com.example.javatest;

/**
 * Author:W
 * 形状(抽象类继承)
 *
 */
public abstract class Shape {
    public  float width;
    public  float height;
    //抽象方法:没有方法体
    public  abstract  float GetArea(float width,float height);
}
package com.example.javatest;

/**
 * Author:W
 * 三角形
 */
public class Triangle extends Shape{

    @Override
    public float GetArea(float width, float height) {
        this.width = width;
        this.height = height;

        float area = width*height/2;
        System.out.println("三角形的面积:"+area);
        return area;
    }
}
package com.example.javatest;

/**
 * Author:W
 * 正方形
 */
public class Rectrangle extends Shape{

    @Override
    public float GetArea(float width,float height) {
        this.width = width;
        this.height = height;

        float area = width * height;
        System.out.println("正方形的面积:"+area);
        return area;
    }
}

接口的定义与使用

package com.example.javatest;

/**
 * Author:W
 * USB接口1
 */
public interface USB {
    public int X = 3;//相当于public static final int X = 3;
    public void adjust();//相当于public abstract void adjust();
    public void power();
}
package com.example.javatest;

/**
 * Author:W
 * USB接口2
 */
public interface USB2 {
    public void rechagre();
}
package com.example.javatest;

/**
 * Author:W
 * 接口实现
 */
public class  MusicUSB implements USB,USB2
{
    @Override
    public void adjust()
    {
         System.out.println("MusicUSB实现接口USB方法adjust");
    }

    @Override
    public void power()
    {
        System.out.println("MusicUSB实现接口USB方法power");
    }

    @Override
    public void rechagre() {
        System.out.println("MusicUSB实现接口USB2方法rechagre");
    }
}

测试脚本类

package com.example.javatest;//包名定义

/**
 * Author:W
 * 1.继承:父类和子类之间是层级结构关系,子类通过继承父类拥有父类的非private的属性和方法。提高了代码的复用性。
 * 1)单继承:只能允许继承自一个父类;
 * 2)子类可以扩展,即拥有自己的属性和方法;
 * 3)子类可以重写父类的方法;
 * 4)super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己的引用。
 * 5)final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
 * 6)子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
 *
 * 2.方法的重写与重载:
 * 1)重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
 * 2)重载:在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
 *
 * 3.抽象类和抽象方法:
 * 1)抽象类:不能实例化对象,必须有子类继承才能使用。抽象类并不一定含抽象方法。
 * 2)抽象方法:拥有抽象方法的类,一定是抽象类。抽象方法只包含一个方法名,而没有方法体。
 *
 * 4.接口:是抽象方法的集合,接口通常以interface来声明。
 * 1)类描述对象的属性和方法。接口则包含类要实现的“抽象”方法。
 * 2)接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
 * 3)接口可以支持多继承。
 * 4)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
 * 5)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
 * 6)一个类可以实现多个接口
 */
public class MainTest {
    public static void main(String[] args)
    {
         System.out.println("=====普通类的继承====");
         Animal dog = new Dog("阿黄");
         dog.eat();

         System.out.println("=====抽象类的继承====");
         Shape  triangle = new Triangle();
         triangle.GetArea(3.5f,5f);

         System.out.println("=====接口的实现====");
         USB  musicUSB1 = new MusicUSB();
         musicUSB1.adjust();
         musicUSB1.power();

         USB2 musicUSB2 = new MusicUSB();
         musicUSB2.rechagre();

    }
}

运行结果如下:

扫描二维码关注公众号,回复: 13508072 查看本文章

猜你喜欢

转载自blog.csdn.net/hppyw/article/details/119644402