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();
}
}
运行结果如下: