Java笔记(第七课)

文章详细解释了Java中的继承机制,包括子类如何继承父类的成员变量和方法,以及构造方法的调用规则。同时,介绍了多态的概念,展示了如何通过父类引用调用子类的方法,以及在银行程序中如何利用多态处理VIP客户和普通客户。此外,还提到了在使用Vector时,强制类型转换的安全性和多态的重要性。
摘要由CSDN通过智能技术生成
本节内容:
1:继承:
1:子类继承父类所有的成员变量及其方法,但不继承构造方法
(如果是private可以继承但是也不能调用)

super();只能放在构造函数第一行

调用super,父类必须有无参构造

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Stu a = new Stu(100);
        a.print();
    
    }
}
class Person
{
    Person()
    {
    }
    Person(int age)
    {
        this.age = age;
    }
    int age;
    void print()
    {
        System.out.println(this.age);
        
    }
    
}
class Stu extends Person
{
    Stu(int age)
    {
        super(age);
        
    }
    
}

2:子类构造函数第一行语句必须调用父类的构造方法,且只能是第一行调用.

3:如果显式地调用了父类的构造方法,则不默认调用父类无参的构造方法了

4:java只支持单继承,不支持多继承
class MAfica extend Afica,Asia{}  //会报错
但支持多层继承//用法,在银行程序添加VIP客户(取款函数中最多可透支3000)

class Cust{}
class VIPCust extends Cust
{
  VIPCust(){};
  VIPCust(String name,int ID, int pwd,double m)
  {
    super(name,ID,pwd,m);
  }
}
5:子类中有和父类句柄一模一样的方法,之后如果用子类的对象调用执行该方法,则执行的是子类的代码(方法).

例如:

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Stu a = new Stu();
        a.print();
    
    }
}
class Person
{
    int age;
    void print()
    {
        System.out.println("I am Person");
    }
}
class Stu extends Person
{
    void print()
    {
        System.out.println("I am student");
    }
}
输出:I am student

2:多态(一种形式多种形态)

1:父类的引用可以无条件指向子类的对象
父类调用的函数的代码是子类的代码
import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Stu stu = new Stu();
        stu.print();
        
        Person per = new Person();
        per.print();
        
        Person sp = new Stu();//用父类 new Stu
        sp.print();
       
    
    }
}
class Person
{
    void print()
    {
    System.out.println("Person");
    }
    
}
class Stu extends Person
{
    void print()
    {
    System.out.println("Student");
    }
}
输出:
Student
Person
Student

####

在银行程序中判断是否创建VIP客户(m>3000) ,否则为普通客户
if(m>3000) st.add(new VIPCust());
else st.add(new Cust());

多态的作用是什么?
在Vector中( 强制)转换类型中防止出错

比如:

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Vector v = new Vector();
        v.add(new A());
        v.add(new B());
        A a = (A)v.get(0);//强制类型转换
        B b = (B)v.get(1);
        a.print();
        b.print();
    }
}
class A
{
    void print()
    {
        System.out.println("A");
    }
}
class B 
{
    void print()
    {
        System.out.println("B");
    }
}
输出:A
B

没有问题,因为你知道a,b是什么类型的,所以可以直接进行转换,而若是:

 B b = (B)v.get(1); 改为  A b = (A)v.get(1);

则会报错

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Vector v = new Vector();
        v.add(new A());
        v.add(new B());
        A a = (A)v.get(0);//强制类型转换
        A b = (A)v.get(1);//变化后的代码
        a.print();
        b.print();
    }
}
class A
{
    void print()
    {
        System.out.println("A");
    }
}
class B 
{
    void print()
    {
        System.out.println("B");
    }
}
报错信息:class B cannot be cast to class A

但若是用到多态,也就是将class B 改为 class B extends A
import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Vector v = new Vector();
        v.add(new A());
        v.add(new B());
        A a = (A)v.get(0);//强制类型转换
        A b = (A)v.get(1);
        a.print();
        b.print();
    }
}
class A
{
    void print()
    {
        System.out.println("A");
    }
}
class B extends A
{
    void print()
    {
        System.out.println("B");
    }
}

输出 : A
B

###

回到银行程序,事实上你并不知道这个客户是否是VIP 客户,故在强制转换时可能会报错,所以要用到多态防止错误的发生。

只需将class VIPCust 改为 class VIPCust extends Cust

###

2:调用者和被调用者必须共同遵守某一限定,调用者按照该限定进行方法的调用,被调用者按照该规定进行方法的实现。//还没理解透

###

银行程序的更新已放到gitlab网站上: https://git.acwing.com/kubeilly/javaforstudy/-/tree/master/customer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值