JAVA面向对象-----继承
面向对象之继承:
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。
一:继承的实现:
我们先定义一个人类的类,人类的类记录了人类的基本属性。
默认这个"人"类为父类。
public class Person {/*** 昵称*/private String nickname;/*** 性别 1代表男 0代表女*/private int gender;/*** 年龄*/private int age;
}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getGander() {return gander;}public void setGander(int gander) {this.gander = gander;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public Person(String nickname, int gander, int age) {this.nickname = nickname;this.gander = gander;this.age = age;}
那其他类,如Boy子类和Girl子类 继承Person父类时,要使用 extends 关键字。
public class Boy extends Person{
}
public class Girl extends Person{}
二:面向对象之继承的代码实现
虽然子类里面什么也没有,但当子类继承父类时,会继承父类的属性和方法。
此时我们可以实例化Boy和Girl类,并采用set方法赋值,get方法读取,然后测试验证。
public class PersonTest {@Testpublic void test02(){Boy person = new Boy();person.setNickname("陈浩楠");person.setGander(1);person.setAge(20);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}@Testpublic void test03(){Girl person = new Girl();person.setNickname("韵菡");person.setGander(0);person.setAge(21);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}
}
三:super关键字
Super关键字,可以用来子类调用父类的成员用,它包括调用父类的public、protected修饰的变量方法。
注意事项:
调用父类的方法:super.父类的方法。
同时super也可以调用父类的构造方法,但是父类中构造方法用private修饰时,不能有子类去继承。
子类可以没有构造方法,他会自动调用父类的构造方法。
在子类中可以调用父类的构造方法,super必须放在子类构造方法的首句。
使用Super实现代码继承:
public class Boy extends Person {public Boy() {}public Boy(String nickname, int gender, int age) {super(nickname, gender, age);}
}
public class Girl extends Person {public Girl() {}public Girl(String nickname, int gender, int age) {super(nickname, gender, age);}
}
实例化Boy和Girl类,但可以不用set,方法赋值啦,因为在子类继承啦父类的构造方法
构造方法里已经有属性(此属性来自父类)啦,但你实例化赋值时,还是把值赋给啦父类,因为属性来自父类。
public class PersonTest {@Testpublic void test04(){Boy person = new Boy("浩楠",1,20);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}@Testpublic void test05(){Girl person = new Girl("韵菡",0,21);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}
}
四:子父类的实例化顺序
(测试中,结果先调用啦父类的构造方法,然后再调用啦子类的构造方法,但这并不
代表先实例化啦父类,其实时先实例化啦子类,只不过是实例化父类的过程先结束罢啦)
public class Person{/*** 昵称*/private String nickname;/*** 性别 1代表男 0代表女*/private int gander;/*** 年龄*/private int age;public Person() {System.out.println("我是Person类的无参构造方法");}public Person(String nickname, int gander, int age) {this.nickname = nickname;this.gander = gander;this.age = age;System.out.println("我是Person类的有参构造方法" );}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getGander() {return gander;}public void setGander(int gander) {this.gander = gander;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
public class Boy extends Person {public Boy() {System.out.println("我是Boy类的无参构造方法");}public Boy(String nickname, int gander, int age) {super(nickname, gander, age);System.out.println("我是Boy类的有参构造方法");}
}
public class Girl extends Person {public Girl() {System.out.println("我是Girl类的无参构造方法");}public Girl(String nickname, int gander, int age) {super(nickname, gander, age);System.out.println("我是Girl类的有参构造方法");}
}
测试:
五:父类的引用指向子类实例化对象
实例化时,类型不用Boy , Girl啦,而使用Person这个类型同样可以。
因为子类的构造方法是继承父类的,所以类型也可以是父类的。
这种现象就叫做父类的引用指向子类实例化对象
public class PersonTest {@Testpublic void test06(){Person person = new Boy("浩楠",1,20);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}@Testpublic void test07(){Person person = new Girl("韵菡",0,21);System.out.println("姓名 >>>"+person.getNickname());System.out.println("性别 >>>"+(person.getGander()==1 ?"猛男":"靓女"));System.out.println("年龄 >>>"+person.getAge());}
}
六:子类可以拥有单独的方法
注意:子类单独拥有的方法,父类无法直接调用
public class Boy extends Person {public void work(){System.out.println("工作");}
}
public class Girl extends Person {public void beauty(){System.out.println("美丽");}
}
public class PersonTest {@Testpublic void test08(){Boy boy = new Boy();boy.work();}@Testpublic void test09(){Girl girl = new Girl();girl.beauty();}
}
七:方法重写与方法方法重载
方法的重载:一个类中有多个具有相同名称但参数列表不同的方法,则称为方法重载,如果只需要执行一个操作,具有相同的方法名称将增加程序的可读性。
方法的重写::方法重写基于继承,子类继承父类,子类可以调用父类的方法,同时子类也可以重写父类中的方法,来实现和父类中不同的业务处理逻辑。重写要求子类中方法与父类中的方法名称相同,参数相同,参数类型相同。当子类调用该方法时,基类中的方法则被覆盖。方法重写即:重写父类方法,同名也同参。例如:人类可以吃
public class Person{/*** 昵称*/private String nickname;/*** 性别 1代表男 0代表女*/private int gander;/*** 年龄*/private int age;public void eat(){System.out.println("吃吃吃");}
}
public class Boy extends Person {@Overridepublic void eat() {System.out.println("吃核桃");}
}
public class Girl extends Person {@Overridepublic void eat() {System.out.println("吃荔枝");}
}
测试:
public class PersonTest {@Testpublic void test08(){Boy boy = new Boy();boy.work();boy.eat();Person person = new Boy("浩楠",1,20);person.eat();}@Testpublic void test09(){Girl girl = new Girl();girl.beauty();girl.eat();Person person = new Girl("韵菡",0,21);person.eat();}
}
八:向上转型与向下转型
注意:向下转型,在子类中进行一定成功,在父类中进行会报错
public class PersonTest {
@Testpublic void test08(){Boy boy = new Boy();boy.work();boy.eat();//向上转型 父类的引用指向子类实例化对象Person person = new Boy("浩楠",1,20);person.eat();}
}
public class PersonTest { @Testpublic void test010(){Person person = new Boy("浩楠",1,20);person.eat();//向下转型Boy boy= (Boy) person;boy.eat();boy.work();}
}
七:final修饰类和方法
final 修饰的类无法被继承
final 修饰的方法无法被重写
1. 当用final关键字修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远会 让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要 注意final类中的所有成员方法都会被隐式地指定为final方法。
2.当用final关键字修饰一个方法时,表明这个方法不能被重写,但是这个方法可以被重载。也 就是说我们使用final关键字修饰一个方法时,相当于给这个方法上了一把锁。
JAVA面向对象-----继承相关推荐
- java 面向对象继承的思想_Java面向对象思想!
刚开始学习Java的时候,一个人跌跌撞撞摸索着往前走,很多东西理解的也懵懵懂懂,后来实践的多了,才慢慢清楚:许多东西虽然很基础但是却很重要,是需要反复思考和加深理解的.在此分享一些归纳总结后的技术干货 ...
- java面向对象--继承与多态
1.1自定义包语法: package <包名> 注意:声明一个包的语句必须写在类中的第一行. 如:创建hero类,将该类存放到com.java.oriented.dato.figure包中 ...
- JAVA面向对象继承之父类宝典(二)
JAVA面向对象之继承(一) 说到父类就不得不说多态了,但想要翻看多态规则的小伙伴可以翻看我下一条博客 文章目录 重写父类的方法 方法重写的规则 Super限定 聪明的JVM 调用父类构造器 子类扩展 ...
- Java 面向对象-继承
1.继承的概述 泛指把前人的作风.文化.知识.财产等接受过来 java中的继承 让类与类之间产生父子关系 被继承的类叫做父类(基类.超类) 继承的类叫做子类(派生类) 格式(extends) clas ...
- java 面向对象继承的思想_Java面向对象思想
Java类的定义: 成员变量会默认初始化,局部变量不会默认初始化. 如何在内存中区分类和对象: ♦类是静态的概念,代码区 ♦对象是new出来的,位于堆内存,类的每一个成员变量在不同的对象中都有不同的值 ...
- JAVA面向对象——继承
1.继承的好处: 1.提高了代码的复用性. 2.让类与类之间产生了关系,给第三个特征.多态提供了前提 Java 中支持单继承,不支持多继承,但对 c++中的多继承进行了改良' 2.单继承与多 ...
- Java面向对象 继承,super,方法重写
/* 继承:表示父类跟子类之间的关系当两个类或者多个类具备相同的属性和方法的时候,可以提取出来,变成父类,子类可以继承子类跟父类是is-a的关系使用:1.使用继承的时候需要使用extend关键字2.使 ...
- Java面向对象——继承(超详细讲解)
一.继承的基本概念 被继承的类称为父类(超类),继承父类的类都称为子类(派生类) 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法: Java只能实现单继承,即一个类只能有 ...
- java 面向对象 — 继承
继承中的构造方法,先执行父类中的构造方法,然后执行子类中的构造方法 继承中的属性,最后执行的属性 覆盖前面的属性 因为是开辟了 两个内存空间,所以相比较是不同的. 如果想比较两个对象的值是否相同的话, ...
最新文章
- python第一天作业:字典
- Android vector标签 PathData 画图超详解
- Spring5 - Bean的初始化和销毁的4种方式
- linux各种小程序源码,Linux中的小程序—— 进度条
- xml验证 java代码,使用Java代码进行XML验证
- jsp出现The import Xxx type is not resolved...
- maven 项目上传私服pom配置
- 【Scala】Scala语言的介绍以及循环的定义(while,for,break,九九乘法表的计算代码)
- 树莓派用java怎样_树莓派(一):安装与使用
- java怎么模拟rfid_如何使用RFID阅读器获取RFID标签上印刷的序列号?
- 现代交换技术--交换概论
- 做网站用企业网站模板好不好
- 在线图片转文字怎么转?这两种方法简单又实用!
- 同态加密(CKKS)中的重线性化(Relinearization)
- Coursera课程自然语言处理(NLP) 借助概率模型做自然语言处理 deeplearning.ai
- 思维题 数颜色(洛谷 P3939)
- MongoDB学习总结四(详细记录使用MongoTemplate操作MongoDB数据库)
- Unity大型场景程序化生成及优化技术—FPS迷宫生成和优化
- 直播 | 2017阿里双11在线技术峰会
- 谷歌浏览器无法记住密码问题
热门文章
- 怎么将视频转为音频mp3格式?
- 1月第3周业务风控关注 |官方监测发现24款违法App,包括高铁管家、搜狗浏览器等
- minipcie网卡改装
- 电脑麦克风没声音怎么办?这3招就可以解决!
- STM32H750VBT6驱动程控增益放大模块PGA113——基于CubeMX的Hal库
- 计算机毕业设计Java学生培训管理系统(源码+系统+mysql数据库+lw文档)
- “裂开了,苦涩了,翻白眼”!我用Python画出微信新出的表情包
- OPTEE:TA和TA加载(一)
- matlab匿名函数求导,MATLAB中的匿名函数和Python中的匿名函数
- 视觉显著性发展与现状——本科毕业设计总结