Java开发学习(3)-面向对象中的继承和多态学习总结
在我们学习完Java的基础知识以后,就要开始Java的面向对象开发,首先学习和了解一下继承和多态的相关概念和语法,以及它们有哪些特性,在哪些应用场景中使用它们。
继承
继承就是子类继承父类的特征和行为,使子类对象(实例)具有父类的实例和方法,使子类具有父类相同的行为。继承需要符合的关系是:is-a,父类更通用,子类更具体。使用继承可以有效实现代码复用,避免重复代码的出现。如:学校中的老师和学生都属于人,食草和食肉动物都属于动物,可以把共有的特性可以作为父类,自有的特性为子类。
关键字
继承使用 extends 和 implements 这两个关键字来实现继承,且所有的类都是继承于Object,如果一个类没有继承关键字,默认继承Object。继承是单一继承,只能继承一个类。
语法:
class 父类 {
}
class 子类 extends 父类 {
}
继承类型
Java中不支持多继承,但是支持多重继承。如下图:
继承特性
1.子类拥有父类非 private 修饰符的属性和方法;
2.子类可以拥有自己的属性和方法;
3.子类可以自己实现父类的方法;
4.继承是单一继承,但可以多重继承;
5.提供类之间的耦合度,但是降低了代码独立性。
实例:
// 创建父类 Person
public class Person {
String name;
int sex;
int age;
public Person() {
this.name = "Person";
System.out.println("调用Person构造函数");
}
public Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String toString() {
return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex;
}
}
// 创建子类 Teacher
public class Teacher extends Person {
public Teacher(String name, String sex, int age) {
//super访问父类成员,必须第一行
super(name, sex, age);
System.out.println("调用父类属性age:" + super.age);
}
public String toString() {
return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex ;
}
public static void main(String[] args) {
Teacher tea = new Teacher();
System.out.println(tea.toString());
}
}
多态
多态就是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口使用不同的实例而执行不同操作。
多态存在的必要条件:继承,重写,父类引用指向子类对象。
转化原则
1.子类对象可以当做父类对象使用
2.父类对象不能当做子类对象使用
3.如果父类引用的是子类对象,那么该父类引用可以通过强制转化成子类对象使用
优势
1.消除类型之间的耦合关系
2.接口性
3.可扩充性
4.可替换性
5.灵活性
6.简化性
实例:
// 创建父类 Shape
class Shape {
void draw() {
System.out.println("Shape.draw()");
}
}
// 创建子类 Circle
class Circle extends Shape {
void draw() {
System.out.println("Circle.draw()");
}
double area(double r) {
System.out.println("Circle.area()");
double area = Math.PI * Math.pow(r, 2);
return area;
}
}
// 创建子类 Square
class Square extends Shape {
void draw() {
System.out.println("Square.draw()");
}
}
// 创建测试类 Test
public class Test {
public static void main(String[] args) {
show(new Square()); // 以 Square 对象调用 show 方法
show(new Circle()); // 以 Circle 对象调用 show 方法
Shape a = new Circle(); // 向上转型
a.draw(); // 调用的是 Circle 的 draw
Circle c = (Circle)a; // 向下转型
System.out.println(c.area(1));// 调用的是 Circle 的 area
}
public static void show(Shape a) {
a.draw();
// 类型判断
if (a instanceof Circle) { // 圆做的事情
Circle c = (Circle)a;
c.draw();
} else if (a instanceof Square) { // 正方形做的事情
Square c = (Square)a;
c.draw();
}
}
}
多态的实现方式
1.重写
2.接口
3.抽象类和抽象方法
后续我们再来学习接口,抽象类的相关知识。
- 点赞
- 收藏
- 关注作者
评论(0)