IT彭于晏带你学java之继承

1.继承

继承:
 * 1.可以进行传递
 * 2.继承的是 属性 和 行为(不是全部)
 * 3.继承 建立 类和类之间关系
继承好处:
 * 1.减少你的代码量(代码复用性)
 * 2.提高你工作效率
 * 3.增强 类与类直接关系(让类和类的关系更加紧密)
继承弊端:
 * 提高内聚:希望一个类中 方法与方法之间联系加强
 * 降低耦合:希望类与类之间 减少联系
 * 继承违反 低耦合
什么时候使用继承?
 * 继承:一定要符合 逻辑
 * 项目经理 是 程序员
 * 狗跟猫  是 动物
 * (子类)  是 (父类)
 * 苹果   是  水果 
class Animal {
	String name;
	String color;
	//  介绍自己的方法
	public void sayHi() {
		System.out.println(name + "..." + color);
	}
}
class Cat extends Animal{
	public void speak() {
		System.out.println("喵喵喵");
	}
}
class Dog extends Animal {
	public void speak() {
		System.out.println("汪汪汪");
	}
}
public static void main(String[] args) {
		//  创建一个猫
		Cat cat = new Cat();
		cat.name = "汤姆";
		cat.color = "灰白色";
		cat.sayHi();
		//  创建一个狗
		Dog dog = new Dog();
		dog.name = "日天";
		dog.color = "黑褐色";
		dog.sayHi();
		dog.speak();
	}


2.继承中的构造方法

继承中的 构造方法
 * 注意: 构造方法是不能继承的
当创建子类对象的时候 为了保证继承的完整性

 * (不管你在 创建子类对象的时候 使用的是 无参还有有参构造)

 * 系统会默认帮你调用 父类中的 无参构造方法



class Father{
	String name;
	public Father() {
		System.out.println("我是Father类的 无参构造方法");
	}
	public Father(String name) {
		this.name = name;
		System.out.println("我是Father类的 有参构造方法");
	}
	public void sayHi() {
		System.out.println(name);
	}
}
class Son extends Father{
	public Son() {
		//  系统帮你在 构造方法的第一行 写了一句代码
		//  如果你不写 系统会默认帮你加上
		super();// 调用父类的构造方法
		System.out.println("我是Son类的 无参构造方法");
		
	}
	public Son(String name) {
		super();//  调用父类的构造方法
		System.out.println("我是Son类的 有参构造方法");
	}
	
}
public static void main(String[] args) {
		Son son = new Son();
		System.out.println("-------------");
		Son son1 = new Son("习远凸");
		
	}

3.如果父类没有无参的构造方法?

class Car{
	String name;
	// 无参
//	public Car() {
//		System.out.println("我是Car 无参");  //
//	}
	//  有参的 构造方法
	public Car(String name) {
		this.name = name;
		System.out.println("我是Car 有参");
	}
}
class Audi extends Car{
	public Audi() {
		//  只要你在构造方法的第一行
		//  调用一下父类构造方法(无参 有参都行)
		super("双钻");
		System.out.println("我是Audi"+name+" 无参");
	}
	public Audi(String name) {
		super("三钻");
		this.name = name;
		System.out.println("我是Audi"+name+" 有参");
	}
}
public static void main(String[] args) {
		Audi audi = new Audi(); 
		Audi audi2 = new Audi("四钻");
	}



4.方法的重写

方法的重写(Override)(前提:至少两个类 并且还有继承关系)
 * 方法的重写 作用:相当于 对 父类的该方法 进行升级
 * 重写:跟父类的方法 完全一致
class IOS7{
	public void siri(){
		System.out.println("说英文");
	}
}
class IOS8 extends IOS7{
	//注解:标识这个方法是重写父类的
	@Override
	public void siri() {
		super.siri();
		System.out.println("说中文");
	}
	//这个方法 一般用来 输出本类中的属性
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		//调用的是父类方法
		//打印出来默认 全类名@16进制的hashcode码
		return "我就想看看属性";
	}
}

public static void main(String[] args) {
		//TestD testD = new TestD();
		//testD.print();
		IOS8 ios8 = new IOS8();
		ios8.siri();
		//咱们直接打印对象
		//希望直接把这个类的 属性输出出来
		System.out.println(ios8.toString());
	}




猜你喜欢

转载自blog.csdn.net/weixin_42120532/article/details/80272450