突然心血来潮想写一写基础篇章的东西,正所谓基础不牢,地动山摇。想必很多学编程的小伙伴有时候也会对一些基础知识困惑吧!
首先我们来了解一下继承,简单地来说,继承就是子类继承了父类当中的方法,比如父类会打拳,然后子类继承了父类之后,子类就学会了打拳。
看下面的代码
package zuoye;
class Person{
public void methods() {
System.out.println("我是父类,会打拳");
}
}
class Son extends Person{
}
public class ceshia {
public static void main(String[] args) {
Son s = new Son();
s.methods();
}
}
执行代码结果如下
这个就是继承,我们new了一个子类的对象,子类对象是可以调用到父类的methods方法的。
这里子月有一个问题,那构造方法能被继承吗? 大家思考一下。
package zuoye;
class Person{
//父类的构造器
public Person() {
}
}
class Son extends Person{
//子类构造器
public Son() {
//调用父类的构造器
super();
}
//看到没有这里报错了 这里是有严格的规定的,父类的构造器只能被子类的构造器所调用
public void method() {
//这里就报错了
super();
}
}
public class gouzao {
public static void main(String[] args) {
}
}
这里又提到了super关键字的使用,super可以在调用父类构造方法的时候使用。
super 还可以访问父类的成员属性和成员方法
当子类的成员变量或方法与父类同名时,可以使用 super 关键字来访问。如果子类重写了父类的某一个方法,即子类和父类有相同的方法定义,但是有不同的方法体,此时,我们可以通过 super 来调用父类里面的这个方法。
super调用成员属性
package gouzaos;
class Person {
int age = 12;
}
class Student extends Person {
int age = 18;
void display() {
System.out.println("学生年龄:" + super.age);
}
}
public class asd {
public static void main(String[] args) {
Student stu = new Student();
stu.display();
}
}
运行结果为
在上面的例子中,父类和子类都有一个成员变量 age。我们可以使用 super 关键字访问 Person 类中的 age 变量。
super调用成员方法
package gouzaos;
class Person {
void message() {
System.out.println("This is person class");
}
}
class Student extends Person {
void message() {
System.out.println("This is student class");
}
void display() {
message();
super.message();
}
}
public class asd {
public static void main(String args[]) {
Student s = new Student();
s.display();
}
}
运行结果如下
在上面的例子中,可以看到如果只调用方法 message( ),是当前的类 message( ) 被调用,使用 super 关键字时,是父类的 message( ) 被调用。
接下来是重写,重写就是方法头相同,方法体不同。
package gouzaos;
class Person{
public void methods() {
System.out.println("我可以吃饭");
}
}
class Sona extends Person{
public void methods() {
System.out.println("我重写了父类的吃饭方法");
}
}
public class asd {
public static void main(String[] args) {
Sona son = new Sona();
son.methods();
}
}
代码的执行结果就是
老样子 那么构造方法中能进行重写吗?
package gouzaos;
class Person{
public Person() {
}
}
class Sona extends Person{
//哎呀 报错了 所以是不能被重写的
public Person() {
System.out.println("构造器中的重写");
}
}
public class asd {
public static void main(String[] args) {
}
}
重载 就是方法名相同参数列表不同
package gouzaos;
public class asd {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
}
public static int sum(int a,int b) {
return a+b;
}
public static int sum(int a,int b,int c) {
return a+b+c;
}
}
那么还是老问题 在构造方法中呢?
package gouzaos;
public class asd {
public static void main(String[] args) {
}
class Person{
public Person() {
}
public void Person(String name) {
}
}
}
这个是可以的,大家看到并没有报错。
是不是根据这几个简单的例子,大家对于继承,重载,重写有一种豁然开朗的感觉呢?有什么疑惑欢迎大家在评论区留言哦!



