网站开发推进计划表,营销型网站的基础建设,wordpress 换数据库,网站域名列表怎么填写本文描述了关于继承的大部分知识#xff0c;但是并不全#xff0c;每篇博客之间的知识都有互串#xff0c;所以需要把几篇文章合起来看#xff0c;学会融会贯通#xff01; 温馨提示#xff1a;使用PC端观看#xff0c;效果更佳#xff01;
目录
1.继承是什么
2.什… 本文描述了关于继承的大部分知识但是并不全每篇博客之间的知识都有互串所以需要把几篇文章合起来看学会融会贯通 温馨提示使用PC端观看效果更佳
目录
1.继承是什么
2.什么时候用到继承
3.如何实现继承
4.关于对象的访问
编辑
5.使用super关键字访问父类
6.父类构造方法
7.介绍protected
8.final关键字 1.继承是什么
1在现实生活中我们都听说过子承父业这个词这种也叫继承。
2某某小孩很顽皮这肯定是继承了他爸的基因
那么在计算机中继承是怎么样的呢
1一个类继承了另一个类这称为继承前者成为子类而后者就是父类
2继承机制是面向对象程序设计使代码可以复用的最重要的手段允许程序员在保持原有类特性的基础上进行扩展增加新功能这样产生的类称为派生类。
2.什么时候用到继承
1当几个类中有较多重复的代码时当两个类的属性很相近时。
2例如 这个时候我们可以用到继承 3.如何实现继承
1语法
继承使用到关键字extends
class 类名 extends 类名 {}
2示例 class Animal {public String name;public int age;public void eat() {System.out.println(正在吃);}
}
class dog extends Animal {public String color;public void doing() {System.out.println(正在旺旺叫);}
}
class Cat extends Animal{public void doing() {System.out.println(正在喵喵喵);}
}
3作用
这样就完成了对共性的抽取实现了代码的复用 4.关于对象的访问 下面做一些测试观察默认情况下是如果访问的
1子类和父类中不存在相同的变量名字 2子类和父类中存在相同变量名字 结果 直接访问访问到的是子类中的变量
3访问成员方法 结果
同样如果子类和父类中存在相同的名字优先访问子类
4访问父类私有成员
我们都知道当被private修饰之和直接访问权限就被限制在了同一个类中那如果是继承它的子类呢
1直接访问 2间接访问 5总结 1通过子类对象的引用去访问子类和父类中不存在相同名字的变量和方法时优先在子类中寻找若子类中不存在该变量或者方法时才会到父类中寻找若都不存在则编译报错。
2通过子类对象的引用去访问子类和父类中存在相同名字的变量或方法(不构成重载)同样优先访问子类子类中不存在才去访问父类都没有则编译报错。
3那如果子类和父类中存在相同的名字和方法该如何访问到父类中的呢下面介绍一个关键字super
5.使用super关键字访问父类
这个super关键字和this有三个类似的功能而super出现的意义就是在子类的方法中访问父类
1super访问父类成员变量
这种一定是要求在子类这个类中而且是在子类中一个方法内 访问 结果前面两个为子类后面一个为父类 2访问父类成员方法
三种访问方式 结果 3super和this的大致访问 4super访问父类构造方法
下面先介绍父类构造方法
6.父类构造方法
在构造方法这里和前面类的构造方法很类似。不写构造方法时编译器默认提供写了不带参数没有实现的构造方法也默认没有提供但是如果写了带参数的构造方法编译器则不会再提供
1不提供构造方法
第一种情况正常 第二种情况正常 第三种情况 2主动提供构造方法
第一种情况只给子类提供 第二种情况只给父类提供报错 原因解释当父类提供了构造方法之后子类就不会再提高任何的构造方法因为父类需要初始化但是子类中没有构造方法无法调用父类的构造方法所以会报错
做法在子类中也提供构造方法并在里面使用super关键字调用父类构造方法 第三种情况子类父类都提供 根据上面的情况我们可以做出一些总结
3关于构造方法的总结
1父子类每次构造子类对象前都会先完成对父类的构造。也就是说总是会先调用父类的构造方法再调用子类的构造方法
2程序员不提供任何构造方法编译器都会默认提供
3当父类手动提供了构造方法而子类却没有则会报错因为子类无构造方法则无法调用
4针对上面第三点的解释为什么子类和父类都不提供构造方法时可以调用到父类构造
即使是默认的构造方法在子类构造中也都会默认有一个super()语句无论写没写。 当父类手动提供了带参构造方法之后子类中也就不会再提供任何的构造方法同理子类中手动提供了带参构造方法父类中也不会再提供。但是前者会报错因为构造子类前一定会先去构造父类(但是没有super()无法调用父类构造)而后者父类不存在带参构造方法不需要强制初始化。存在带参构造方法时在实例化一定要对其赋值否则就是报错上面的终究原因 4使用super()调用父类构造方法
1默认提供(不细说了) 2手动提供
class Big {public int a;public Big(int a) {this.a a;}
}
class Min extends Big {public int b;public Min(int a, int b) {super(a);this.b b;}
}
public class Test3 {public static void main(String[] args) {Min min new Min(10,20);}
} 5关于super的细节和注意事项
1super()必须在子类构造方法中的第一行否则报错 并且super()只能出现一次也不能和this()同时出现他们都必须在第一行
2只能存在于非静态的方法中依赖对象用来访问非静态成员方法和字段 7.介绍protected
这是一个关键字一般是用于修饰成员变量和成员方法 根据上表可知只要在同一个包中不同类之间是可以互相使用的它还多了一条性质就是只要是父子类关系在不同的类中也可以互相调用。
下面是不同包中的两个类 1不能访问的状态
1public修饰 2被protected修饰后 意思就是在不同包中不能直接访问被protected修饰的成员变量 2允许访问状态
想要访问被protected修饰的成员变量就要按照下面的步骤来进行
1使用继承关系 2使用super关键字访问父类 错误原因就是super不能在静态方法中使用
3正确访问 访问并且赋值 8.final关键字 final关键字在java中有三个功能。 1修饰变量2修饰类3修饰方法 1修饰变量
1未修饰时
public static void main(String[] args) {int a 520;System.out.println(a);a 250;System.out.println(a);} 未被修饰时变量的值是可以被改变的也就是说没有被final修饰的520就是250
2加上修饰
语法
final 类型 变量名字 值; 被fianl修饰的变量可以理解成变成了一个常量此时是无法被修改的。 2final修饰类 作用被final修饰的类不能再被继承称为密封类 1修饰前 2修饰后: 3修饰方法 作用当这个方法被修饰后表明这个方法不能再被重写 1未被修饰 2被修饰后