CSDN话题挑战赛第2期
参赛话题:Java技术分享
所谓继承,它是java面向对象编程技术的一块基石,有了这块基石,我们便可以通过extends关键字让一个类和另一个类建立起一个父子关系
对于继承的好处,主要有以下三点👇
对于怎么继承,既然本文讲extends关键字,那一定是使用extends来继承自一个父类
具体的模式写法如下
class 父类{
...
}
class 子类 extends 父类{
...
}
在继承之后,子类便可以得到父类的属性(成员变量)和行为(各种方法),而且在此基础上,子类还可以继续增加属于自己的功能
说完以上三点,相信大家对继承也有了一个初步地了解,如果有学过C++的小伙伴肯定也知道,在C++中也有继承,那对于继承在Java和C++中有什么不一样呢,我们来探索一下🔍
说完了继承的基本概念,下面我们到编译器中带大家先看一个简单案例观察一下继承到底是怎么样的💻
People父类
public class People {
private String name;
private int age;
//共同行为
public void queryCourse(){
System.out.println(name + "在查看课表");
}
/**
父类对外获取私有私有成员变量的方法
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Teacher子类
public class Teacher extends People{
int run;
void teach()
{
System.out.println("教书育人");
}
}
Student子类
public class Student extends People{
int eat;
void study()
{
System.out.println("努力学习");
}
}
test测试类
public class test {
public static void main(String[] args) {
Teacher t = new Teacher();
t.setName("王老师");
System.out.print(t.getName() + "在");
t.teach();
Student s = new Student();
s.setName("小明");
System.out.print(s.getName() + "在");
s.study();
System.out.println("----------");
t.queryCourse();
s.queryCourse();
}
}
运行结果
例如这个Array类,就是继承自Object一个总的对象类
具体地实现我们到代码里来看看
public class Test {
public static void main(String[] args) {
//1.子类不能继承父类的构造器
//2.子类可以继承父类的私有成员吗? - 可以继承,但只是不能访问
Tiger t = new Tiger();
//t.eat();
//3.子类可以继承父类的静态成员吗 - 不可以,只是共享
System.out.println(Tiger.location);
//静态成员用类访问
}
}
class Animal extends Object{
//Object类是默认继承的
private void eat(){
System.out.println("动物正在吃东西~~");
}
public static String location = "长隆动物园";
}
class Tiger extends Animal{
}
子类是继承了父类的私有成员
的,对于访问的话是不可以直接访问的,但是可以通过父类的get()方法来访问。这样讲述可能还是有点抽象不能继承父类的静态成员
,无论是成员变量或是成员方法,再举个例子好,说完了子类继承父类后的一些属性和特性,我们再来详细说一下成员变量和成员方法的一个访问机制
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
d.lookdoor();
d.run();
}
}
class Animal{
public void run(){
System.out.println("动物会跑~~");
}
}
class Dog extends Animal{
public void lookdoor(){
System.out.println("狗会看门");
}
}
class Dog extends Animal{
public String name = "汪汪";
public void lookdoor(){
System.out.println("狗会看门");
}
public void run() {
System.out.println("狗跑得贼快");
}
}
以上就是成员方法的调用机制,接下来说说成员变量
class Dog extends Animal{
public String name = "汪汪";
public void showname(){
String name = "名字";
System.out.println(name);
}
public void lookdoor(){
System.out.println("狗会看门");
}
public void run() {
//super.run();
System.out.println("狗跑得贼快");
}
}
class Animal{
public String name = "叫声";
public void run(){
System.out.println("动物会跑~~");
}
}
class Dog extends Animal{
public String name = "汪汪";
public void showname(){
String name = "名字";
System.out.println(name);
System.out.println(this.name); //访问当前子类对象name
System.out.println(super.name); //访问当前父类对象name
}
public void lookdoor(){
System.out.println("狗会看门");
}
public void run() {
//super.run();
System.out.println("狗跑得贼快");
}
}
对于子类继承自一个父类,并且获取了父类中的一些成员方法,但是我们说过子类功能是强于父类的,原因是子类可以通过【override】关键字来重写父类中的成员方法
大于或者等于父类被重写的方法的权限
,不允许降低方法的访问权限上面有讲到子类其实并没有真正意义上继承了父类的静态方法
】
University父类
public class University {
void admit(double chinese, double math, double english){
double aggregate = chinese + math + english;
if(aggregate >= 200)
System.out.println(aggregate + "\t双非过线了!!!");
else
System.out.println(aggregate + "\t双非没过线~~>_<~~");
}
}
ImportantUniversity子类
public class ImportantUniversity extends University{
@Override //1.重写校验注解,加上之后,这个方法必须是正确重写的,更安全
//2.提高程序的可读性,代码优雅
void admit(double chinese, double math, double english) {
double aggregate = chinese + math + english;
if(aggregate >= 240)
System.out.println(aggregate + "\t211过线了!!!");
else
System.out.println(aggregate + "\t211没过线~~>_<~~");
}
}
C9ImportantUniversity子孙类
public class C9ImportantUniversity extends ImportantUniversity{
@Override
void admit(double chinese, double math, double english) {
double aggregate = chinese + math + english;
if(aggregate >= 270)
System.out.println(aggregate + "\t985过线了!!!");
else
System.out.println(aggregate + "\t985没过线~~>_<~~");
}
}
test测试类
public static void main(String[] args) {
double chinese = 80;
double math = 90;
double english = 98;
University university = new University();
university.admit(chinese, math, english);
ImportantUniversity g = new ImportantUniversity();
g.admit(chinese, math, english);
C9ImportantUniversity gg = new C9ImportantUniversity();
gg.admit(chinese, math, english);
}
运行结果
通过本文的阅读,您是否有对Java中的extends关键字有了一个比较全面的认识,这个关键字主要是体现在面向对象的第二大特征——继承,之后还会继续出品Java中其他关键字和对应知识点的说明,例如多态的abstruct关键字、接口的implements关键字,记得关注我哦🌸
若本文有任何疑问,可以于评论区留言或者私信我,感谢您对本文的观看,