禧难题之七:
贝赫和斯维讷通-戴尔猜想:指的是对有理数域上的任一椭圆曲线, 其L函数在1的化零阶等于此曲线上有理点构成的Abel群的秩。数学家总是被诸如X**2 Y**2=Z**2这样的代数方程的所有整数解的刻画问题着迷。欧几里德曾经对这一方程给出完全的解答,但是对于更为复杂的方程,这就变得极为困难。事实上,正如马蒂雅谢维奇指出,希尔伯特第十问题是不可解的,即不存在一般的方法来确定这样的方法是否有一个整数解。当解是一个阿贝尔簇的点时,贝赫和斯维讷通-戴尔猜想认为,有理点的群的大小与一个有关的蔡塔函数z(s)在点s=1附近的性态。特别是,这个有趣的猜想认为,如果z⑴等于0,那么存在无限多个有理点(解),相反,如果z⑴不等于0,那么只存在有限多个这样的点。
前言
上周我们学习了类的继承,子类对父类的继承并不改变类成员的访问权限,也就是说,如果父类的成员是公有的、被保护的或默认的,它的子类仍具有相应的这些特性,但有一点我们要特别注意:子类不能获得父类的构造方法!那么子类想要调用父类的构造方法时,我们应该怎么做呢?
一.super关键字
如果要调用父类的构造方法,可以使用 super关键字。super可以用来访问父类的构造方法、普通方法和属性。Super关键字的主要功能有两点;1)在子类的构造方法中显式的调用父类构造方法,2)访问父类的成员方法和变量。
二.Super关键字调用父类构造方法
super 关键字可以在子类的构造方法中显式地调用父类的构造方法,基本格式如下:
super(parameter-list);
其中,parameter-list 指定了父类构造方法中的所有参数,super( ) 必须是在子类构造方法的方法体的第一行。具体如何使用我们通过实战进一步详细说明。
三.super关键字访问父类成员
当子类的成员变量或方法与父类同名时,可以使用 super 关键字来访问。如果子类重写了父类的某一个方法,即子类和父类有相同的方法定义,但是有不同的方法体,此时,我们可以通过 super 来调用父类里面的这个方法。
使用 super 访问父类中的成员与 this 关键字的使用相似,只不过它引用的是子类的父类,语法格式如下:
super.member
其中,member 是父类中的属性或方法。使用 super 访问父类的属性和方法时不用位于第一行。下面实战做进一步说明。
四.super和this的区别
4.1.super关键字的用法:
super.父类属性名:调用父类中的属性
super.父类方法名:调用父类中的方法
super():调用父类的无参构造方法
super(参数):调用父类的有参构造方法
4.2. this关键字的用法:
this.属性名:表示当前对象的属性
this.方法名(参数):表示调用当前对象的方法
通俗来讲,可以将super理解为指向父类对象的指针,this为指向当前对象的指针。下面通过实战我们来学习super关键字的用法吧。
五.实战
5.1.super调用父类构造方法
代码语言:javascript复制package tisheng3;
class People {
public People(String name, int age) {//声明父类2个参数的构造方法
System.out.println("我是带两个参数的父类构造方法:" name age "岁");
}
public People(String name, String sex,int age) {//声明父类3个参数的构造方法
System.out.println("我是带三个参数的父类构造方法:" name "性别" sex age "岁");
}
}
class Pupil extends People {
public Pupil(int Num) {//声明子类带1个参数的构造方法
super("IT进阶之旅", 1); // 调用父类中含有2个参数的构造方法
System.out.println("子类带一个参数的构造方法,日期为:" Num);
System.out.println();
}
public Pupil(String name, int Num) {//声明子类带两个参数的构造方法
super("小圈圈", "男", 16); // 调用父类中含有3个参数的构造方法
System.out.println("子类带2个参数的构造方法,名字为:" name "日期为:" Num);
}
}
class Test {
public static void main(String args[]) {
Pupil X1 = new Pupil(20200502);//调用1个参数的构造方法
Pupil X2 = new Pupil("农历",20200410);//调用2个参数的构造方法
}
}
5.2.super关键字访问父类成员
代码语言:javascript复制package tisheng3;
class Father {
int ID = 12345;
void property() {
System.out.println(",I'm daddy,I have six dollars!");
}
}
class Son extends Father {
int ID = 56789;
void property() {
System.out.println("ID:" ID ",I'm son,I am very poor!");
}
void poor() {
property();//调用子类本身的property方法
System.out.printf("ID:" super.ID);//调用父类的成员变量
super.property();//调用父类的property方法
}
}
class Test2 {
public static void main(String args[]) {
Son s = new Son();//实例化一个Son对象
System.out.println("调用子类的property方法:");
s.property();
System.out.println();
System.out.println("调用子类的poor方法:");
s.poor();
}
}
END
小编有话说:
恍惚间,四月在五一的规划中画上句号,今年也已过去三分之一,岁月不等人,把握当下才能喜迎美好未来!上周课后习题参考答案如下(文末还有本周课后习题,大家记得查收~):
按要求编写一个Java应用程序:
(1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。
(2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性,和计算体积的方法。
(3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。