黑马程序员技术交流社区
标题:
Java基础学习日记 - 面向对象之继承
[打印本页]
作者:
qihuan
时间:
2015-7-4 08:23
标题:
Java基础学习日记 - 面向对象之继承
package practice;
/**
* 面向对象之继承
*
* 继承: 1.提高了代码的复用性。
* 2.让类与类之间产生了关系。有了这个关系,才有了多态的特性。
*
* Tips:不要为了获取其他类的功能,简化代码而继承,
* 必须是类与类之间有所属关系才可以继承。
*
* 重点: 1.在Java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患,
* 就是当父类中定义了相同功能,当功能内容不同时,子类对象不确定要运行哪一个。
* 但是Java保留了这种机制,并用另一种体现形式来完成表示,叫做多实现。
* 2.Java支持多层继承。
* 3.如何使用一个继承体系中的功能:先查阅父类体系的描述,因为父类中定义的是该体系的共性功能。
* 通过了解共性功能,就可知该体系的基本功能。在具体调用时,要创建最子类的对象(父类不能创建对象;
* 创建子类对象可以实现更多的功能)。
*
* 代码体现:
* 子父类出现后,类成员的特点:
* 1.变量:如果子类中出现了非私有同名变量时,
* 子类访问本类中的对象时用this,子类对象访问父类对象用super。
* (super的使用与this几乎一致,this本类对象引用,super父类对象的引用)
* 2.函数:当子类出现和父类一模一样的函数时,子类调用该函数,会执行子类函数的内容。
* 这种情况是函数的另一个特性:重写(覆盖)。
* 覆盖注意事项:
* (1).子类覆盖父类,必须保证子类的权限大于等于父类权限,才可以覆盖,否则编译失败。
* (2).静态只能覆盖静态。
* (3).与重载的区别:重载只看函数的参数列表;重写子类父类的方法一模一样。
* 3.构造函数
* 在对子类对象进行初始化时,父类函数也会运行,因为子类的构造函数中第一行有一条隐示的语句super();
* super();会访问父类中空参数的构造函数。
* Q:为什么子类一定要访问父类的构造函数
* A:因为父类中的数据子类可以直接获取,子类对象在建立时,需要先查看父类是如何对这些数据初始化的。
*
* 例子:定义学生类和工人类,将学生和工人的共性提取出来,单独进行描述。
* 共性:name、age
*
* @author Qihuan
*
*/
//定义一个person类
class Person {
private String name;
private int age;
void speak(){
System.out.println("hello");
}
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;
}
}
//学生类
class Student extends Person {
void study() {
System.out.println("Student:"+"\n"+"Name: "+getName()+"\n"+"Age:"+getAge());
}
void speak(){
super.speak();
System.out.println("study");//重写
}
}
//工人类
class Worker extends Person {
void work() {
System.out.println("Worker");
}
}
public class ExtendsPractice {
public static void main(String[] args) {
Student stu = new Student();
stu.setAge(20);
stu.setName("LiMing");
stu.study();
stu.speak();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2