3.28·Java进阶学习

文章详细介绍了Java中的多态概念,包括对象多态的定义、特点以及好处和弊端。通过实例展示了如何通过父类引用调用子类方法,实现动态方法绑定。此外,文章还探讨了支付接口的设计模式,使用接口实现不同支付方式的抽象,并展示了JDK8和JDK9接口的新特性,如默认方法和静态方法。最后,提到了内部类及其成员访问规则。
摘要由CSDN通过智能技术生成

目录

多态

对象多态

多态的成员访问特点

多态的好处

​编辑

多态的弊端​​​​​​​

​编辑

支付接口设计

总结 

​编辑

接口新特性

JDK8接口的新特性 

JDK9版本新特性 

代码块 ​编辑

内部类


多态

对象多态

对于多态,可以总结它为:

一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

1 接口 和 实现接口并覆盖接口中同一方法的几不同的类体现的

2 父类 和 继承父类并覆盖父类中同一方法的几个不同子类实现的.

public class Abao{
    public static void main(String[] args) {
        fu f = new zi();
        System.out.println(f.num);
        f.show();
    }
}
class fu{
    int num = 10;
    public void show(){
        System.out.println("fu----");
    }
}
class zi extends fu{
    int num = 20;
    public void show(){
        System.out.println("zi----");
    }
}

父类引用子类对象       --------->      fu f = new zi()

本质:就是对父类的方法进行优化

ps:

1、如果没有对父类的方法进行重写的话,那父类在调用方法的时候就还是父类原来的方法。

2、父类调用成员变量的时候只能调用自己的成员变量,而不能调用子类的成员变量哦

多态性:发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类(基类/父类)对象引用变量来实现动态方法调用。

详细内容:java 父类获取子类对象_Java多态性详解 (父类引用子类对象)_安幕的博客-CSDN博客

多态的成员访问特点

1.创建对象的时候,左右两边的类型可以不一致,是所有对象都可以这样创建莫?

answer:No,得是父类引用指向子类对象,接口引用指向实现类对象才可以wow

​​​​​​​

2.为什么调用的方法,是同一套方法,但是却有不同的表现形式呢?

对于对象多态,给不同的子类对象,父类的引用里面的逻辑就会发生变化,出现多态啦

多态的好处

多态的弊端​​​​​​​

不能使用子类的特有成员

多态中的转型

​​​​​​​

支付接口设计

Payment.java

package 支付接口设计;

public interface payment {
    public void PayInter(double money);
}

BankcardPayment.java

package 支付接口设计;

public class BankcardPayment implements payment{
    public void PayInter(double money){
        System.out.println("利用网银支付了"+money+"元!");
    }
}

 PlatfromPayment.java

package 支付接口设计;

public class PlatformPayment implements payment{
    public void PayInter(double money){
        System.out.println("利用平台支付了"+money+"元!");
    }
}

CredictCardPayment.java

package 支付接口设计;

public class CredictCardPayment implements payment{
    public void PayInter(double money){
        System.out.println("利用信用卡支付了"+money+"元!");
    }
}

test.java

package 支付接口设计;
import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        payment inter = null;

        lo:while(true){
            System.out.println("请输入你的选择哦");
            System.out.println("1.网银支付");
            System.out.println("2.平台支付");
            System.out.println("3.银行卡支付");
            System.out.println("4.退出");

            int choice = sc.nextInt();
            switch(choice){
                case 1:
                    inter = new BankcardPayment();
                    break;
                case 2:
                    inter = new PlatformPayment();
                    break;
                case 3:
                    inter = new CredictCardPayment();
                    break;
                case 4:
                    System.out.println("感谢你的使用啦,再见咯");
                    break lo;
                default:
                    System.out.println("输入错误哦,再来一次呗");
                    break;
            }

            System.out.println("请输入你的付款金额哦");
            double money = sc.nextDouble();
            inter.PayInter(money);
        }
    }
}

总结 

接口新特性

JDK8接口的新特性 

 

package 接口测试;

public class A{
    public static void main(String[] args) {
        AInterface inter = new AInterface();
        inter.method();
        inter.print();
        Inter.print1();
        
    }
}

interface Inter {
    public void method();

    public default void print(){
        System.out.println("default---print");
    }

    public static void print1(){
        System.out.println("static---print1");
    }
}

class AInterface implements Inter{
    public void method(){
        System.out.println("A---method");
    }

}

JDK9版本新特性 

interface Inter {
    public void method();

    public default void print(){
        System.out.println("default---print");
        log();
    }

    public static void print1(){
        System.out.println("static---print1");
        log();
    }
    // 接口中允许调用私有方法
    // private是让方法仅类内成员可以用
    // static是让调用方法的范围更大
    // 如果不加static,那类内静态方法就调用不了这个方法啦
    private static void log(){
        System.out.println(111);
    }
}

代码块 

内部类

public class A{
    public static void main(String[] args) {
        Outer.Inner obt = new Outer().new Inner();
        obt.show();
    }
}
class Outer{
    int num = 150;
    class Inner{
        int num = 100;
        public void show(){
            int num = 50;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(Outer.this.num);
        }
    }
}

内部类成员访问

·内部类中,访问外部类成员:直接访问,包括私有

·外部类中,访问内部类成员:需要创建对象访问 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值