15、Java中级进阶 面向对象 继承
1、何为面向对象
其本质是以建立模型体现出来的抽象思维过程和面向对象的方法(百度百科)是一种编程思维,也是一种思考问题的方式
如何建立面向对象的思维呢?1、先整体,再局部2、先抽象,再具体3、能做什么,再怎么做
2、何为继承
继承是面向对象三大特征之一继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
被继承的类称为父类(超类),继承父类的类称为子类(派生类)通过继承可以实现代码重用子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。
构造器而言,它只能够被调用,而不能被继承,可以通过使用super()进行调用,
对于继承而已,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器(通过super()),而且必须是在子类构造器中做的第一件事(第一行代码)。
对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的Java 的继承是单继承,但是可以多重继承,
3、Java中如何使用?
语法:
[访问权限] class 子类名 extends 父类名{
类体定义;
}
比如Dog类和Animal类,Dog类就是子类,Animal类就是父类,其中子类也就是Dog类继承了父类也就是Animal类的非私有属性和方法,同时子类可以增加子类特有的属性和方法,并且子类可以重写父类的方法。使用继承首先可以减少大量的重复性代码,把公共的代码提取出来放到父类中同时也方便管理。
实例:
Animal父类:
public class Animal {
private Integer age;
public Animal(){
System.out.println("Animal construct method");
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
public void eat(){
System.out.println("eat food");
}
}
Dog类:
public class Dog extends Animal{
private String color; //毛色
public Dog(String color){
this.color = color;
}
public void run(){
System.out.println("Dog is running");
}
@Override
public void eat(){
System.out.println("dog eat bone");
}
public static void main(String[] args) {
Dog dog = new Dog("红色");
dog.eat();
}
}
在程序中调用结果:
控制台打印:
Animal construct method
dog eat bone
这里需要说的我们在new Dog类的时候父类的构造方法也会执行并且会先于子类执行。定义一个cat类:
public class Cat extends Animal{
@Override
public void eat(){
super.eat();
System.out.println("cat eat finsh");
}
}
调用Cat的eat方法发现不只打印了“cat eat finsh”还打印了父类的“eat food”。当父类方法和子类方法重名时,可以通过super关键字强制访问父类的变量和方法并且在new子类对象的过程中,也可以通过super关键字调用父类的构造方法,没有使用super的时候默认调用父类的默认的构造方法,父类的构造方法要先于子类执行。
4、继承的好处
a、提高代码的复用性
b、提高代码的维护性
c、让类与类之间产生关系,是多态的前提
继承的缺点:
增强了类与类之间的耦合性
5、继承中的关键点~
(1)继承是发生在多个类之间
(2)继承使用关键字extends
(3)JAVA只能单继承,允许多层继承
(4)被继承的类叫父类(超类),继承父类的类叫子类(派生类)
(5)在父类中的非私有属性和方法可以被子类继承
(6)protected(受保护的访问权限修饰符),修饰的属性或方法可以被子类继承(7)构造方法不能被继承
(8)创建对象会调用构造方法,调用构造方法不一定就是创建对象
(9)实例化子类对象,会先调用父类的构造方法,如果父类中没有默认的构造方法,那么子类必须显示的通过super(...)来调用父类的带参构造方法,super也只能在子类构造方法中的第一句
发哥讲
如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈~
● 扫码关注公众号
最新文章
- Oozie分布式任务的工作流——Spark篇
- 常用的logging配置
- ref关键字的作用
- JS对象的写法
- log4j日志输出到web项目指定文件夹
- hdoj 2816 I Love You Too
- C/c++几个预定义的宏:__DATE__,__TIME__,__FILE__,__LINE__
- 关于sizeof的笔试面试题具体解释
- hdu4362 dp + 单调队列优化
- awk 详解+实例
- 【憩园】C#并发编程之概述
- 【已解决】checkout 配置无效的问题可以进来看下
- .NET 控件的认识。
- Confluence 6 Microsoft SQL Server 设置准备
- linux kernel 源码安装
- kafka集群监控之kafka-manager部署(kafka-manager的进程为:ProdServerStart)
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
- 4.翻译:EF基础系列--EF架构
- SSRS配置2:加密管理
- 使用 IntraWeb (8) - 系统模板