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());
}