一、继承
1.继承的概念
在Java中,继承是一种面向对象编程的特性,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在此基础上添加新的特性或修改继承的特性。
- 父类:被继承的类。
- 子类:继承其他类的类。
- 继承关键字:在Java中,使用extends关键字来表示继承关系。
- 继承的格式:(class 子类 extends 父类)
2.继承的示例
创建父类Person类
package test;
public class Person {
public int age = 18;
public String name ="张三";
public char sex ='男';
public Double height = 180.5;
public void run(){
System.out.println("跑步");
}
public void jump(int num){
System.out.println("学生跳远"+num+"米");
}
}
创建子类Student类,使用extends关键字,使子类继承父类
package test;
public class Student extends Person{
public void study(){ //子类自己的方法
System.out.println("学习");
}
}
创建Test类,测试类
public class Test {
public static void main(String[] args){
Student student = new Student();
student.run();
student.a();
student.study();
student.height = 180.0;
Person person = new Person();
person.study(); //这一行报错,父类不能用子类的方法
}
}
注意事项
- 继承的本质就是代码的复用,子类可以使用父类已经写好的代码,如此子类就无需重新编写此类代码了。子类可以调用所继承父类的代码,而父类无法调用子类的代码。
- java的继承层次当中是不能互相继承的
- 一个类可以被多个类当中父类,一个子类只能用一个父类(java仅支持单继承),不能互相继承
- 如果父类中的方法被声明为private,则该方法在子类中是不可见的,因此不能被重写。
private为访问修饰符
3.访问修饰符不同的访问权限
本类 | 子类 | 同包 | 不同包 | |
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 无法访问 |
不写 | 可以访问 | 可以访问 | 可以访问 | 无法访问 |
private | 可以访问 | 无法访问 | 无法访问 | 无法访问 |
public修饰的代码,本类和其他类都是可以访问的
private修饰的代码,本类使可以访问的,但是其他类不可以访问
二、方法
1.普通方法
- 方法是有访问权限的
- 方法必须写上返回数据的类型,如果不需要返回数据就写void
- 在同个类当中,方法名可以相同,但是方法的签名不能相同(方法的签名=方法名+参数列表的类型)
- 方法上可以使用其他的关键字进行修饰,比如static和final,它们有着不同的意义
void study(){
System.out.println(1);
}
void study(int a){
System.out.println(1);
}
void study(String b){
System.out.println(1);
}
void study(int a,String b){
System.out.println(1);
}
2.方法的重载
在同一个类当中方法名相同但是参数列表不同就是方法的重载
重载与方法的返回类型无关,即两个方法即使返回类型不同,但如果它们的参数列表相同,则不能构成重载。
重载的特点
- 方法名相同:重载的方法必须具有相同的名称。
- 参数列表不同:方法的参数列表必须不同,这包括参数的类型、数量或参数的顺序。
- 与返回类型无关:方法的返回类型不是判断重载的依据。
- 与访问修饰符无关:方法的访问修饰符(如public、private)也不是重载的判断条件。
void study(String b){
System.out.println(1);
}
void study(int a,String b){
System.out.println(1);
}
3.方法的重写
发生在父子类当中,子类重新实现父类方法的功能
为什么会有重写?
继承的本质是代码的复用,在复用的过程当中父类的方法的实现不一定完全适用
方法重写之后,子类对象调用的也是重写后的方法
示例1 只继承
A类
public class A {
public void run(){
System.out.println("跑得快");
}
public void fly(){
System.out.println("飞得高");
}
}
B类
public class B extends A{
}
测试类
public class Test {
public static void main(String[] args) {
B b=new B();
b.run();
b.fly();
}
}
输出结果为
跑得快
飞得高
用图形理解其流程
示例2 方法重写
A类
public class A {
public void run(){
System.out.println("跑得快");
}
public void fly(){
System.out.println("飞得高");
}
}
B类
public class B extends A{
public void run(){
System.out.println("B跑得快");
}
}
测试类
public class Test {
public static void main(String[] args) {
B b=new B();
b.run();
b.fly();
}
}
输出结果为
B跑得快
飞得高
用图形理解其流程
示例3
A类
public class A {
public void run(){
System.out.println("跑得快");
}
public void fly(){
System.out.println("飞得高");
}
}
B类
public class B extends A{
public void run(){
System.out.println("B跑得快");
}
}
测试类
public class Test {
public static void main(String[] args) {
B b=new B();
b.run();
b.fly();
A a=new A();
a.run();
}
}
输出结果为
B跑得快
飞得高
跑得快
用图形理解其流程