欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA面向对象(二)

程序员文章站 2022-05-03 10:00:18
一、继承性1.继承性的好处:减少了代码的冗余,提高了代码的复用性;便于功能的拓展。class A extends B{}A:子类 B:父类2.体现:一旦子类A继承了父类B以后,子类中就获取了父类B中声明的所有属性和方法。特别的,父类中声明为privated的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。只是因为封装性的影响,不能直接调用而已。子类继承父类以后,还可以声明自己特有的属性或方法,实现更能的拓展。3.规定:一个类可以被多个子类继承,一个子类只能...

一、继承性

1.继承性的好处:

减少了代码的冗余,提高了代码的复用性;便于功能的拓展。

class A extends B{}
A:子类  B:父类

2.体现:

一旦子类A继承了父类B以后,子类中就获取了父类B中声明的所有属性和方法。特别的,父类中声明为privated的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。只是因为封装性的影响,不能直接调用而已。

子类继承父类以后,还可以声明自己特有的属性或方法,实现更能的拓展。

3.规定:

一个类可以被多个子类继承,一个子类只能有一个父类

子父类是相对的概念

子类直接继承父类称为直接父类,间接继承称为间接父类

子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法

二、方法的重写

1.概念

重写是指,子类继承父类以后,可以对父类中同名同参数的方法进行覆盖操作。重写以后,当子类对象调用子类中同名同参数的方法时,实际执行的是子类重写的方法

2.规定

子类重写的方法的方法名和形参列表与父类被重写的方法相同

子类重写的方法的权限修饰符不小于父类被重写的方法(子类不能重写父类private的方法)

子类重写的方法的返回值类型要相同,特殊:返回值类型是A类,重写方法的返回值类型可以是A类或A类的子类

子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。

子类和父类中同名同参数的方法要么都声明为非static(考虑重写),要么都声明为static(不是重写)

三、super关键字

1.理解为:  父类的

2.super可以调用父类的属性、方法、构造器

3.使用

我们可以在子类的方法或构造器中通过“super.属性”或“super.方法”来调用父类中声明的属性和方法。但是通常情况习惯省略“super.”,但是在子类和父类声明了同名的属性或方法时,就不能省略。

当子类重写了父类的方法,我们想要在子类的方法中调用父类被重写的方法,要用“super.”的方式

4.super调用构造器

我们可以在子类的构造器中显式得使用“super.(形参列表)”来调用父类的构造器

调用构造器必须在首行

对于super.(形参列表)和this.(形参列表)只能二选一,不能同时出现

在构造器首行没有显式的super.(形参列表)或this.(形参列表),则默认调用的是父类的空参构造器(写父类的时候,最好把空参构造器加上)

练习

JAVA面向对象(二)

class Circle {
	private double radius;

	public Circle() {
		this.radius = 0;
	}
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	public double findArea() {
		return Math.PI*this.radius*this.radius;
	}
}
class Cylinder extends Circle{
	private double length;

	public Cylinder() {
		this.length = 1;
	}
	public double getLength() {
		return length;
	}
	public void setLength(double length) {
		this.length = length;
	}
	public double findVolume() {
		return super.findArea()*length;
	}
	public double findArea() {
		return super.findArea()*2+2*Math.PI*super.getRadius()*length;
	}
}
public class test{
    public static void main(String[] args) {
        Cylinder cylinder = new Cylinder();
        cylinder.setLength(4);
        cylinder.setRadius(2);
        double v = cylinder.findVolume;
        double s = cylinder.findArear;
        System.out.println("圆柱体的体积和面积分别是: "+v+", "+s);
    }
}

 

 

 

 

 

本文地址:https://blog.csdn.net/vv0606/article/details/107285371