学习继承与多态,class,interface,Overload,override,super,final

1.继承

1.1类继承

在这里插入图片描述

Java只支持单继承,不允许多重继承
一个子类只能有一个父类
一个父类可以派生出多个子类

子类继承了父类,就继承了父类的方法和属性。
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
因而,子类通常比父类的功能更多。
在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。
在这里插入图片描述

1.1.1关于继承的规则:

子类不能继承父类中私有的(private)的成员变量方法。**

1.2接口

在这里插入图片描述

**用 interface 来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。接口没有构造方法。
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
在这里插入图片描述

与继承关系类似,接口与实现类之间存在多态性
接口也可以继承另一个接口,使用extends关键字**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.方法重载( overload )

方法重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同,参数次数不同即可。 例如系统类:
在同一个类中可以定义多个同名方法—方法名重载

****public class PrintStream{
public void println(int i) {……}
public void println(float f) {……}
public void println(String s) {……}
}

重载方法的参数列表必须不同
重载方法的返回值类型可以相同,也可以不同
调用时根据方法的参数类型来区别。
print(3);print(1.2f);print(“hello!”);**

2.1构造方法重载举例

public class Person {
private String name;
private int age;
private Date birthDate;
public Person(String name, int age, Date d) {
this.name = name;
this.age = age;
this.birthDate = d;
}
public Person(String name, int age) {
this(name, age, null); //this.name=name; this.age=age;
//this.birthDate=null;
}
public Person(String name, Date d) {
this(name, 30, d); //this.name=name;
this.age=30;this.birthDate=d;
}
public Person(String name) {
this(name, 30); //this.name=name; this.age=30;
}
}**
构造方法重载,参数列表必须不同**

3.方法重写( override)

在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置、重写),在程序执行时,子类的方法将覆盖父类的方法。
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
覆盖方法不能使用比被覆盖方法更严格的访问权限,子类覆盖方法的权限>=父类被覆盖方法的权限

3.1方法重写例子

public class Person {
protected String name;
protected int age;
public String getInfo() {
return "Name: "+ name + “\n” +"age: "+ age;
}
}
public class Student extends Person {
private String school;
public String getInfo() { //
------------------------------------方法重写覆盖方法
return "Name: "+ name + "\nage: "+ age
+ "\nschool: "+ school;
}
public static void main(String args[]){
Student s1=new Student();
s1.name=“Bob”;
s1.age=20;
s1.school=“school2”;
System.out.println(s1.getInfo()); //Name:Bob age:20 school:school2
}
}
**

4.super关键字

******在Java类中使用super来引用父类的成分
1.super可用于访问父类中定义的属性
2.super可用于调用父类中定义的成员方法
3.super可用于在子类构造方法中调用父类的构造方法
4.super的追溯不仅限于直接父类

4.1super关键字调用父类的方法

public class Person {
private String name;
private int age;
public String getInfo() {
return "Name: " + name + “\nage: " + age;
}
}
public class Student extends Person {
private String school = “New Oriental”;
public String getSchool(){ return school; }
public String getInfo() {
// 调用父类的方法
return super.getInfo() +”\nschool: " +school;
}
}

4.2子类获得父类构造方法

子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
在一个Java类中可以通过两种方式获得构造方法
1.使用系统默认的无参数构造方法
2.显式定义一个或多个构造方法

一旦显式定义了构造方法,则系统不再提供默认构造方法
在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法
如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错

4.3super方法调用父类构造函数

在这里插入图片描述

5.final关键字

在Java中声明类、属性和方法时,可使用关键字final来修饰。
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
final标记的类不能被继承。提高安全性,提高程序的可读性。
final标记的方法不能被子类重写。增加安全性。
final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。
final PI=3.14;

6.多态

方法声明的形参类型为父类类型,可以使用子类的对象作为实参调用该方法

*public class Test{
public void method(Person e) {
e.getInfo();
}
public static void main(Stirng args[]){
Test t = new Test();
Student m = new Student();
t.method(m); //子类的对象m传送给父类类型的参数e
Worker w = new Worker();
t.method(w); //子类的对象w传送给父类类型的参数e
}
}

6.1个人总结多态

多个子类给父类来实现,这是后面框架经常使用,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值