* 继承:
* 需要定义独立类,将其他类的共性内容抽取到独立类中,让其他类和这个独立类产生一种关系:“继承”关系
*
* 继承的好处:
* 1)提供了代码的复用性(代码结构清晰)
* 2)提升了代码的维护性
* 3)类和类产生的这种“继承关系”,是多态的前提条件
*
* 继承关系也是一种弊端,类和类产生,耦合性增强
*
* 开发原则:低耦合,高内聚
*
* 耦合:尽量的一个类能完成的事情一个类去完成不要产生过多的关系
* 内聚:执行某件事情的能力
//使用继承之前,定义两个学生类
class Student{
//有两个成员方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
class Teacher{
//有两个成员方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
*/
//使用继承
class Person{
//有两个成员方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
//学生类
class Student extends Person{
}
//测试类
public class ExtendsDemo1 {
public static void main(String[] args) {
//继承之前的测试
Student s=new Student();
s.eat();
s.sleep();
System.out.println("------------");
Student s2=new Student();
s2.eat();
s2.sleep();
}
}
继承的特点:
* 1)在JAVA语言中,类和类之间只支持单继承,不支持多继承
* 2)虽然不支持多继承,但是类与类之间是可以多层继承
class GrandFather{
public void method() {
System.out.println("method grandFather");
}
}
//定义父类
class Father extends GrandFather{
/*public void method() {
System.out.println("method grandFather");
}*/
public void show() {
System.out.println("show father");
}
}
class Son extends Father{
/*public void show() {
System.out.println("show father");
}*/
public void function() {
System.out.println("function son...");
}
}
public class ExtendsDemo2 {
public static void main(String[] args) {
//创建子类对象
Son s=new Son();
s.function();
s.show();
s.method();
}
}
* 继承中的注意事项:
* 1)子类继承父类,可以继承父类中非私有的成员
* 本身私有的成员变量/成员方法只能在本类中访问,外界不能访问,但可以间接通过公共的方法来访问
* 2)子类继承父类不能继承构造方法,但是可以通过一个关键字来访问父类的构造方法(super)
* 3)不要为了使用部分功能而去使用继承
* 当A类如果是B类的一种,或者B类是A类的一种
class Fu{
public int num=100;
private int num2=50;
public void method() {
System.out.println(num2);
}
//私有的成员方法
private void function() {
System.out.println(num);
System.out.println(num2);
}
public void function2() {
function();
}
}
class zi extends Fu{
//定义一个成员方法
public void show() {
System.out.println(num);
//System.out.println(num2);
}
}
public class ExtendsDemo3 {
public static void main(String[] args) {
//创建子类对象
zi z=new zi();
z.show();
z.method();
System.out.println("---------");
z.function2();
}
}
* 继承中的成员关系:
* 成员变量:
* 子类继承父类,如果子类中的成员变量名称和父类的成员变量名称不一致的情况:分别访问
*
* 子类继承父类,如果子类中的成员变量名称和父类的成员变量名称一致的情况:
* 执行流程:
* 1)先在子类的局部位置中找,如果找到了就使用它
* 2)如果局部位置中没有,在子类的成员位置中找,如果找到了就使用它
* 3)如果找不到就在父类的成员位置中找,如果找到了就使用
* 4)如果还找不到,就报错,说明访问了一个不存在的变量
* 遵循:就近原则
class Fu2{
public int num=100;
}
class zi2 extends Fu2{
public int num2=200;
public int num=50;
public void show() {
int num=200;//局部变量不能用static 修饰
System.out.println(num);
}
}
public class ExtendsDemo4 {
public static void main(String[] args) {
/*zi2 z=new zi2();
System.out.println(z.num);
System.out.println(z.num2);*/
zi2 z=new zi2();
z.show();
}
}