深圳网站开发培训价格,好看的wordpress图片主题,做淘宝网站需要,ps网页设计教程全集前言
http://t.csdnimg.cn/uibg3
在上一篇中我们已经讲解过封装#xff0c;这里就主要讲解继承与多态 继承
1.为什么需要继承
Java中使用类对现实世界中实体来进行描述#xff0c;类经过实例化之后的产物对象#xff0c;则可以用来表示现实中的实体#xff0c;但是现实…前言
http://t.csdnimg.cn/uibg3
在上一篇中我们已经讲解过封装这里就主要讲解继承与多态 继承
1.为什么需要继承
Java中使用类对现实世界中实体来进行描述类经过实例化之后的产物对象则可以用来表示现实中的实体但是现实世界错综复杂事物之间可能会存在一些关联那在设计程序是就需要考虑
面向对象思想中提出了继承的概念专门用来进行共性抽取实现代码复用
2.什么是继承
继承:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性 的基础上进行扩展增加新功能这样产生新的类称派生类。
继承呈现了面向对象程序设计的层次结构 体现了由简单到复杂的认知过程。
继承主要解决的问题是共性的抽取实现代码复用 比如猫和狗都是动物,那么我们就可以进行共性的抽取实现继承 在这,Dog和Cat都继承了Animal类其中Animal类称为父类/基类或超类Dog和Cat可以称为Animal的子类/派生类继承之后子类可以复用父类中成员子类在实现时只需关心自己新增加的成员即可,在这之后还可以实现多态
3.如何使用继承
1.基本应用
我们先对父类进行设计
class Animals {public String name;public int age;public String color;public Animals(String name, int age, String color) {this.name name;this.age age;this.color color;}public void eat() {System.out.println(this.name 正在吃饭!);}
}
之后对子类使用extends关键字进行继承
class Dog extends Animals {public Dog() {super(xiaohei, 10, 黄色);}public void bark() {System.out.println(this.name 正在汪汪汪!);}
}class Cat extends Animals {public Cat(){super(xiaohuang,20,黑白);}public void mew() {System.out.println(this.name 正在喵喵喵!);}
}
在这里我们的子类应当与父类有所不同不然就没必要使用继承
2.子类对父类成员变量的访问
class Base {public int a 1;public int b 2;
}class Derived extends Base {public int a 100;public int c 3;public void test() {System.out.println(super.a);//调用父类的System.out.println(this.a);//调用子类的System.out.println(super.b);//调用父类System.out.println(this.b);//子类没有则调用父类的System.out.println(this.c);//子类的}
}public class Test2 {public static void main(String[] args) {Derived derived new Derived();derived.test();}
}
如果访问的成员变量子类中有优先访问自己的成员变量。 如果访问的成员变量子类中无则访问父类继承下来的如果父类也没有定义则编译报错。 如果访问的成员变量与父类中成员变量 同名则 优先访问自己的。 3.子类对父类成员方法的访问
class Base2 {public void testA() {System.out.println(testA());}
}class Derived2 extends Base2 {public void testA() {System.out.println(Derived2::testA());}public void testB() {System.out.println(testB());}public void testC() {this.testA();//子类super.testA();//父类this.testB();//子类}
}
public class Test2 {public static void main(String[] args) {Derived2 derived2 new Derived2();derived2.testC();}
} 通过子类对象访问父类与子类中不同名方法时优先在子类中找找到则访问否则在父类中找找到则访问否则编译报错。 通过派生类对象访问父类与子类同名方法时如果父类和子类同名方法的参数列表不同(重载)根据调用方法适w传递的参数选择合适的方法访问如果没有则报错 4.super与this关键字
对于上述2.3子类对父类的访问归根结底是super与this之间的区别
需要注意的是
1.只能在类的非静态方法中使用用来访问非静态方法和字段
2.在构造方法中调用时必须是构造方法的第一条语句并且不能同时使用 this是对当前对象的访问,而super是子类对象中从父类继承下来部分成员的引用 5.子类构造方法
class Base {public Base() {System.out.println(Base());}
}
class Derived extends Base {public Derived() {// super(); // 注意子类构造方法中默认会调用基类的无参构造方法super(),// 用户没有写时,编译器会自动添加而且super()必须是子类构造方法中第一条语句System.out.println(Derived());}
}
public class Test2 {public static void main(String[] args) {Derived d new Derived();}
}
4.结尾
Java中不支持多继承
一般我们不希望出现超过三层的继承关系. 如果继承层 次太多, 就需要考虑对代码进行重构了
若该类被final关键字修饰则不能被继承
值得一提的是区别于组合 继承表示对象之间是is-a的关系比如狗是动物猫是动物 组合表示对象之间是has-a的关系比如汽车 这里贴一个详解继承与组合的文章 https://www.hollischuang.com/archives/1319 如果上述内容对您有帮助希望给个三连谢谢