java面向对象的继承以及方法重写和重载
2017-02-28 20:27
537 查看
java面向对象的继承
public class ExtendsTest {/*
* 把多个类中相同的成员提取出来定义到一个独立的类中。
* 然后让多个类和该类产生联系。这多个类就具备了这些内容。这个关系叫做继承
*
* 继承的格式:
* 修饰符 class 子类名 extends 父类名 { ... }
* 继承的好处:
* 1.提高类代码的复用性.提高了代码的维护性
* 3.让类与类之间产生了一个关系,这就是多态的前提
* 继承的缺点:
* 1.(java开发原则)低耦合,高内聚。
* 耦合:就是类与类之间的关系
* 内聚:独立完成某与类之间些功能的能力
* 继承就是让类的耦合的增强。某个类改变,就会影响和它相关的类
* 2.打破了封装性
* 继承的特点:
* 1.java中的类只支持单继承;
* 2.但是可以多层(重)继承。
* 继承中的注意事项:
* 1.子类不能继承父类的私有成员变量和成员方法。
* 2.子类不能继承父类的构造方法,但是可以通过super去访问
* 3.不要为了部分功能去继承。
* 子类是父类的一种(是否使用继承的判断条件之一)。
* java继承中的成员关系:
* 1.成员变量:
* 1).子类的成员变量名称和父类的成员变量名称不一样的时候。
* 2).子类的成员变量名称和父类的成员变量名称一样的时候,访问哪一个呢?
* 局部变量 --》子类-->父类--》父类的父类
* 子类的方法访问变量的查找顺序:
* 在子类成员方法的局部范围找,有就使用
* 在子类的成员变量里找,有就使用
* 在父类的成员变量里找,有就使用
* 找不到,就报错
* 2.构造方法:
* 1).子类的构造方法会默认取访问父类的无参的构造方法
* 是为了子类访问父类的数据进行初始化
* 2).父类中如果没有无参的构造方法。???
* 子类通过super去明确调用的父类的构造方法
* 子类通过this调用本身的其他构造,但是一定会有一个去访问父类的构造
* 父类提供一个无参构造方法
* 3.成员方法
* 1).子类的成员方法名称和父类的成员方法名称不一样的时候。
* 2).子类的成员方法名称和父类的成员方法名称一样的时候。
* 通过子类对象访问一个方法的查找顺序:
* 在子类中找,有就使用
* 在父类中找,有就使用
* 。。。
* 找不到就报错。
* 方法重写和方法重载(混淆点)
* 方法重写:在子类中,出现了和父类一模一样的方法声明的现象
* 方法重载:在同一个类中,出现的方法名相同,参数列表不同的现象。(返回值类型也可以更改)
* this和super:
* this:代表当前类的对象的引用
* super:代表父类的存储空间的标识。(就是父类的引用),通过super可以访问父类的成员。
* 使用场景:
* 成员变量: this.成员变量(本类的)
* super.成员变量(父类的)
* 构造方法:
* this(...)(本类的)
* super(...)(父类的)
* 成员方法:
* this.成员方法(本类的)
* super.成员方法(父类的)
*/
public static void main(String[] args) {
Doctor doctor = new Doctor();
doctor.setName("zhangsan");
doctor.setAge(50);
doctor.setDepartment("耳鼻喉科");
doctor.setJiBie("一级");
Teacher teacher1 = new Teacher();
Teacher teacher2 = new Teacher(555)
doctor.name;
doctor.eat();
doctor.work();
doctor.print();
teacher.eat();
teacher.setAge(30);//子类对象调用父类方法
teacher.work();
Police police = new Police();
police.eat();
String name = police.getName();
System.out.println(name);
}
}
class People{
int a = 1000;
private String name;
private int age;
public People(){
System.out.println("这是父类的无参的构造方法");
}
public People(int a){
System.out.println("这是父类的有参的构造方法");
}
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;
}
private void eat(){
System.out.println("是人就要喝营养液");
}
public void work(){
System.out.println("我就是你们的爹");
}
}
class Men extends People{
int a = 100;
private String name;
private final boolean sex = false;
public boolean isSex() {
return sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 医生类
* @author root
*
*/
class Doctor extends Men{
int a = 10;
private String department;//科室
private String jiBie;//职业级别
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getJiBie() {
return jiBie;
}
public void setJiBie(String jiBie) {
this.jiBie = jiBie;
}
public void work(){
super.work();
System.out.println("医生给病人看病去了");
}
public void print(){
int a = 1;
System.out.println(super.a);
}
}
/**
* 老师类
* @author root
*
*/
class Teacher extends People{
private String subject;//任教科目
private String jiBie;//教师级别
public Teacher(){
// super();
System.out.println("这是子类无参的构造方法");
}
public Teacher(int a){
super(54);
System.out.println("这是子类有参的构造方法");
}
public Teacher(String subject, String jiBie) {
super(36);//调用父类的构造方法,默认隐藏的
this.subject = subject;
this.jiBie = jiBie;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getJiBie() {
return jiBie;
}
public void setJiBie(String jiBie) {
this.jiBie = jiBie;
}
public void work(){
System.out.println("老师去给学生上课了");
}
}
/**
* 警察类
*/
class Police extends People{
private String leiBie;//工作类别
private String jiBie;//警官级别
public String getLeiBie() {
return leiBie;
}
public void setLeiBie(String leiBie) {
this.leiBie = leiBie;
}
public String getJiBie() {
return jiBie;
}
public void setJiBie(String jiBie) {
this.jiBie = jiBie;
}
public void work(){
System.out.println("警察开始为人民服务了");
}
}
相关文章推荐
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- Java基础温习 (6)重载,重写以及继承,多态的区别
- java学习之旅40--面向对象_13_继承_Object类用法_toString和equals方法_重写toString
- java中的继承和多态以及重载和重写
- JAVA【类】析构器、重载与继承、方法的重写、自动转型、多态、方法与类的分类、接口继承
- JavaDay06--Homework(方法重载和重写的区别,构造方法,继承类)
- 面向对象5(方法的重载、重写、继承)
- java中的方法重载与重写以及方法修饰符
- 面向对象的特征之—继承(方法重载 vs 方法重写)
- java的重写、重载以及继承、多态和封装
- php 面向对象的三大要素(封装、继承、多态)以及重写(override)和重载(overload)的举例说明
- [Java]重载,重写以及继承,多态的区别
- Java学习之面向对象(方法的重写 overwrite,super的使用,继承中的构造方法)
- java笔记(三)[java中的继承&java中的方法重载,重写,重构&java中的向上转型和乡下转型&java中的抽象类和接口&java中的接口向上转型]
- Java基础第10讲-面向对象之方法的重写和重载
- 对JAVA的继承,方法的覆盖,重载的认识 以及对象访问方面的探讨
- [Java]重载,重写以及继承,多态的区别
- java重载方法重写、继承封装
- JAVA 方法重载,方法重写,继承
- java中继承期间父子类型的初始化顺序以及重写方法的调用规则