Java学习笔记06

1.继承(extends): 子类继承父类

        是⼦类继承⽗类的属性和⾏为,使得⼦类对象具有与⽗类相同的属性、相同的⾏ 为。⼦类可以直接访问⽗类中的⾮私有的属性和⾏为。

好处 :1. 提⾼代码的复⽤性。 2. 类与类之间产⽣了关系,是多态的前提。

1).语法结构:

子类(衍生类/扩展类) extends 父类(基类)

2).继承的特征:

a.子类继承父类,就继承父类中所有的成员变量和成员方法

b.所有类都有默认继承的父类:Object

c.一个类只能有一个父类,但是一个父类可以有多个子类(多重继承)

d.子类中还可以定义自己独特的成员变量和成员方法,子类的功能一定比父类的强大

class Fu {
 // Fu中的成员变量。
 int num = 5;
}
class Zi extends Fu {
 // Zi中的成员变量
 int num2 = 6;
 // Zi中的成员⽅法
 public void show() {
 // 访问⽗类中的num
 System.out.println("Fu num = " + num); // 继承⽽来,所以直接访问。
 // 访问⼦类中的num2
 System.out.println("Zi num2 = " + num2);
 }
}
class ExtendDemo02 {
 public static void main(String[] args) {
 // 创建⼦类对象
 Zi z = new Zi();
 // 调⽤⼦类中的show⽅法
 z.show();
 }
}
演示结果:
Fu num = 5
Zi num2 = 6

3).特殊情况:

   a.子类中的成员变量名和父类中的同名时

   ps: name

   Dog d = new Dog()

   d.name -> 显示子类中自己的成员变量,获取不到父类的成员变量

   建议: 有父子类关系的类中,尽量不要出现相同的成员变量名

   b.子类中可以引用父类对象

   c.创建子类对象之前,会先创建父类对象,子类加载前,会先加载父类

   e.通过子类对象调用方法是:先看子类中有没有重写父类中的方法.如果重写了,则显示子类中的方法,如果没有则显示从父类中继承过来的方法

2.super关键词

super:父类对象

1).在子类构造方法中一定都会先默认调用父类的无参构造方法,默认添加super()

2).如果父类中没有无参构造方法,就要在子类中手动调用父类的有参构造方法

3).super()只能出现在构造方法的第一行

4).建议:所有存在父子类关系的类中,建议先添加无参构造方法,方便子类使用

class Fu {
 // Fu中的成员变量。
 int num = 5;
}

class Zi extends Fu {
 // Zi中的成员变量
 int num = 6;
 public void show() {
 // 访问⽗类中的num
 System.out.println("Fu num = " + super.num);
 // 访问⼦类中的num
 System.out.println("Zi num = " + this.num);
 }
}
演示结果:
Fu num = 5
Zi num = 6

3.方法的重写

⼦类中出现与⽗类⼀模⼀样的⽅法时(返回值类型,⽅法名和参数列表都相 同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

前提: 必须存在父子类关系

子类中重写父类定义的方法,方法的方法名/方法的返回值/方法的修饰符/方法的参数,必须完全一致才能实现方法的重写.

class Phone {
 public void sendMessage() {
 System.out.println("发短信");
 }
 public void call() {
 System.out.println("打电话");
 }
 public void showNum() {
 System.out.println("来电显示号码");
 }
}
// 智能⼿机类
class NewPhone extends Phone {
 // 重写⽗类的来电显示号码功能,并增加⾃⼰的显示姓名和图⽚功能
 public void showNum() {
 // 调⽤⽗类已经存在的功能使⽤super
 super.showNum();
 // 增加⾃⼰特有显示姓名和图⽚功能
 System.out.println("显示来电姓名");
 System.out.println("显示头像");
 }
}
public class ExtendsDemo06 {
 public static void main(String[] args) {
 // 创建⼦类对象
 NewPhone np = new NewPhone();
 // 调⽤⽗类继承⽽来的⽅法
 np.call();
 // 调⽤⼦类重写的⽅法
 np.showNum();
 }
}


//打电话
//来电显示号码
//显示来电姓名
//显示头像

4.抽象类: abstract

  1)抽象类:

   a.使用abstract修饰的类,叫做抽象类

   b.一个类中可以存在多个抽象方法

   c.抽象类是不可以new对象的,也就是不能实例化

   只能通过子类实现

   d.抽象类也有构造方法,为了方便子类使用

   2)抽象方法

   a.使用abstract修饰的方法,抽象方法

   b.抽象方法是没有方法体的

   c.如果子类不重写父类中的抽象方法,就必须将自己变成抽象类

3)成员变量是不可能是抽象的,因为都是具体的类型,具体的值.

public abstract class Animal {
 public abstract void run();
}
public class Cat extends Animal {
 public void run () {
 System.out.println("⼩猫在墙头⾛~~~");
 }
}
public class CatTest {
 public static void main(String[] args) {
 // 创建⼦类对象
 Cat c = new Cat();
 // 调⽤run⽅法
 c.run();
 }
}
输出结果:
⼩猫在墙头⾛~~~

1. 抽象类不能创建对象,如果创建,编译⽆法通过⽽报错。只能创建其⾮抽象⼦类的对象。

2. 抽象类中,可以有构造⽅法,是供⼦类创建对象时,初始化⽗类成员使⽤的。

3. 抽象类中,不⼀定包含抽象⽅法,但是有抽象⽅法的类必定是抽象类。

4. 抽象类的⼦类,必须重写抽象⽗类中所有的抽象⽅法,否则,编译⽆法通过⽽报错。除⾮该 ⼦类也是抽象类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值