JAVA面向对象:继承案例的实现

继承的相关概念:

继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承这个新定义的类即可。java通过extends关键字可以实现类与类的继承:

            class  子类名  extends  父类名{ ... }

优点:1.提高了代码的复用性;

           2.提高了代码的维护性;

           3.让类与类之间产生关系,是多态的前提。

继承设计原则:高内聚低耦合。(内聚指自己完成某件事情的能力;耦合指类与类之间的关系。)

注意事项:1.java支持单继承,不支持多继承(C++),即只能有一个父类;

                  2.java支持多层继承,即 class A{}  ---  class B extends A{}  ---  class C extends B{}

                  3.子类只能继承父类的所有非私有的成员;

                  4.子类不能继承父类的构造方法,但可以通过super关键字去访问父类构造方法;

                  5.能自己完成的功能就自己完成,不要为了部分功能而去继承父类

扫描二维码关注公众号,回复: 4422669 查看本文章

This关键字:

可以看做是本类中的一个对象,用于区分同名的局部变量和成员变量,this指代的是成员变量。

super关键字:

可以看做是父类中的一个引用,用于区分子类中和父类中同名的成员(成员变量,成员方法),super指代的是父类中的值。

1. this和super后面可以跟成员变量和成员方法:

         this.成员变量                    super.成员变量

         this.成员方法()                  super.成员方法()

2. 调用构造方法:

         this(参数):调用本类中的构造方法                

         super(参数):调用父类中的构造方法

注意事项:this和super 不能用于static 方法中。

public class ExtendsDemo02 {
	public static void main(String[] args) {
		DaughterClass d = new DaughterClass();
		d.show("凌天一击!");
	}
}

class DadClass{
	String name = "嘲风";
	public DadClass() {
		System.out.println("hello,我是父类的构造方法");
	}
}
class DaughterClass extends DadClass{
	String name = "七杀";
	public DaughterClass() {
		System.out.println("靠你吉娃,我是子类的构造方法");
	}
	public void show(String name) {
		System.out.println(name);
		System.out.println(this.name);
		System.out.println(super.name);
	}
}

方法的重载和方法的重写的区别:

重写(override):  子类中出现了和父类方法名一样,返回值类型一样,参数列表一样的方法,就叫做方法的重写

重载(overload):  一个类中可以存在多个名字相同的方法,但是必须保证参数的个数或类型不同,与返回值无关

注意事项:

父类中私有方法不能被重写

子类重写父类方法时,访问权限不能更低

父类静态方法,子类也必须通过静态方法进行类似重写的操作。(但其实不叫重写,因为静态方法没有方法重写的特性,多态中证明


==================此处代码在一个文件中写多个类,以便很好的显示类之间的继承关系。=========================

注意事项:一个文件中可以定义多个类,但是必须只能有一个类使用public类, 并且用public修饰的类必须和文件名相同。main 方法必须定义在用public修饰的类中(定义在非public修饰的类中无法执行)

继承中成员变量的关系:先在子类中找,再去父类中找,父类中没有就报错

继承中成员方法的关系:先在子类中找,再去父类中找,父类中没有就报错

继承中构造方法的关系:子类中的构造方法默认会调用父类中无参数的构造方法,如果父类中没有无参数的构造方法,子类必须直                                            接或间接地调用父类 中其他的构造方法 (否则程序不能编译

public class ExtendsDemo {
	public static void main(String[] args) {
		Cat cat = new Cat();                //实例化子类对象,会默认先调用父类中的构造方法
		cat.name = "孤单";                    //子类对象调用父类的属性赋值
		System.out.println(cat.eyesColor);  //输出子类存在的属性信息:金色
		System.out.println(cat.age);       //输出父类中才存在的属性信息:10
		cat.eat();                        //子类对象调用父类方法:[父类成员方法]吃东西
	}
}
//父类/基类/超类
class Animal{
	String name;
	int age = 10;
	String eyesColor = "蓝色";
	public Animal() {
		System.out.println("[父类构造方法]");
	}
	public void sleep() {
		System.out.println("[父类成员方法]");
	}
	public void eat() {
		System.out.println("[父类成员方法]吃东西");
	}
}
//子类/派生类
class Cat extends Animal{
	String eyesColor = "金色";
	public Cat() {
		super();   //默认调用父类的构造方法,可以不写,但依然存在
		System.out.println("[子类构造方法]我是一只小喵喵");
	}
	public void sleep() {
		System.out.println("[子类成员方法]小喵喵在睡觉");
	}
}

 

猜你喜欢

转载自blog.csdn.net/AI_drag0n/article/details/84872760