继承(二)

子类不能继承父类中的构造方法

我们在什么时候可以使用继承呢?
	当两个类之间存在"is a"的关系的时候,我们就可以使用继承
	
	举例子:
		人类
		学生类
		老师类
		狗类
		
		人类 is a 学生类  XXX 所以人类不能继承学生类
		人类 is a 老师类  XXX 所以人类不能继承老师类
		人类 is a 狗类    XXX 所以人类不能继承狗类
		学生类 is a 人类  所以学生类可以继承人类
		学生类 is a 老师类 XXX 所以学生类不能继承老师类
		学生类 is a 狗类  XXX 所以学生类不能继承狗类
		老师类 is a 人类  所以老师类可以继承人类
		老师类 is a 学生类 XXX 所以老师类不能继承学生类
		老师类 is a 狗类 XXX 所以老师类不可以继承狗类
		
		class Person {}
		
		class Student extends Person {}
		
		class Teacher extends Person {}
		
		class Dog {}
	
	注意:我们不能单单为了获取某个功能而瞎去继承一个类
		class Bird {
			public void fly() {
			
			}
		}
		
		class Person extends Bird {
			/*
				public void fly() {
			
				}
			*/
		}
		
		class Demo {
			public static void main(String[] args) {
				Person p = new Person();
				p.fly();
			}
		}
		
在子父类继承中成员变量的关系?
	在父类中有一个成员变量,在子类中有一个成员变量,在子类的成员方法中有一个局部变量
	
	如果这三个变量的名字都不同的话:
		class Fu {
			int i = 1;
		}
		
		class Zi extends Fu {
			int j = 2;
			
			public void print() {
				int a = 3;
				
				System.out.println(a);//3
				System.out.println(j);//2
				System.out.println(i);//1
			}
		}
		
		class Demo {
			public static void main(String[] args) {
				Zi zi = new Zi();
				zi.print();
			}
		}
		
	如果这三个变量的名都相同的话:
		class Fu {
			int i = 1;
		}
		
		class Zi extends Fu {
			int i = 2;
			
			public void print() {
				int i = 3;
				
				System.out.println(i);//3
				System.out.println(i);//3
				System.out.println(i);//3
			}
		}
		
		class Demo {
			public static void main(String[] args) {
				Zi zi = new Zi();
				zi.print();
			}
		}
	
		结果打印是3,那如果想要分别打印出1,2,3该怎么办?
			class Fu {
				int i = 1;
			}
			
			class Zi extends Fu {
				int i = 2;
				
				public void print() {
					int i = 3;
					
					System.out.println(i);//3
					System.out.println(this.i);//2
					System.out.println(super.i);//1
				}
			}
			
			class Demo {
				public static void main(String[] args) {
					Zi zi = new Zi();
					zi.print();
				}
			}
			
			
在子父类继承中构造方法的关系?
	1.子类在中的所有的构造方法的第一行,默认都有一个super()
		class Fu {
			String name;
			
			public Fu() {
		
			}
		}
		
		class Zi extends Fu {
			public Zi() {
				//super();//调用父类的空参构造
			}
			
			public Zi(String name) {
				//super();//调用父类的空参构造
			}
			
			public Zi(int age) {
				//super();//调用父类的空参构造
			}
			
			public Zi(String name, int age) {
				//super();//调用父类的空参构造
			}
		}
		
		class Demo {
			public static void main(String[] args) {
				Zi zi = new Zi();
				System.out.pintln(zi.name);//null
			} 
		}
		
		为什么会有这样的现象呢?
			因为有继承,说明子类可以使用父类的成员变量,那也就意味着父类的成员变量一定要有一直才可以被
			使用,所以在创建类对象的时候,会调用子类的构造方法,而子类的构造方法中会先去调用父类的构造
			方法,目的就是给父类的额成员变量默认初始化
	
	2.子类中的所有的构造方法中,第一行要么是super(参数),要么是this(参数),他们不可以共存
		class Fu {
		
		}
		
		class Zi extends Fu {
			public Zi() {
				this("");//调用了下面的有参构造方法
			}
			
			public Zi(String name) {
				//super();
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜龙的小博站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值