唠唠SE的面向对象-10——多态

10. 多态

我们先看一个例子:动物类实例化出人和猪

abstract class Animal {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

class Person extends Animal {
    
}

class Pig extends Animal {
    
}

public class Test1 {
    public static void main(String[] args) {
        Animal person = new Person();
        Animal pig = new Pig();
    }
}

难道人和猪都是一个祖师爷??????(黑人问号.jpg)

这就是所谓的多态。。。。。。

 

多态的原理:

1:当父类和子类具有相同的非静态成员变量,那么在多态下访问的是父类的成员变量

class Animal {
    public String name = "animal";
}

class Person extends Animal {
    public String name = "person";
}

public class Test1 {
    public static void main(String[] args) {
        Animal person = new Person();
        System.out.println(person.name); // animal
    }
}

2:当父类和子类具有相同的静态成员变量,那么在多态下访问的是父类的静态成员变量

        所以:父类和子类有相同的成员变量,多态下访问的是父类的成员变量。

class Animal {
    public static String name = "animal";
}

class Person extends Animal {
    public static String name = "person";
}

public class Test1 {
    public static void main(String[] args) {
        System.out.println(Animal.name); // animal
        System.out.println(Person.name); // person
        Animal person = new Person();
        System.out.println(person.name); // animal
    }
}

3:当父类和子类具有相同的非静态方法(就是子类重写父类方法),多态下访问的是子类的成员方法。

class Animal {
    public void say() {
        System.out.println("animal。。。");
    }
}

class Person extends Animal {
    public void say() {
        System.out.println("person。。。");
    }
}

public class Test1 {
    public static void main(String[] args) {
        Animal person = new Person();
        person.say(); // person
    }
}

4:当父类和子类具有相同的静态方法(就是子类重写父类静态方法),多态下访问的是父类的静态方法。

class Animal {
    public static void say() {
        System.out.println("animal。。。");
    }
}

class Person extends Animal {
    public static void say() {
        System.out.println("person。。。");
    }
}

public class Test1 {
    public static void main(String[] args) {
        Animal person = new Person();
        person.say(); // animal
    }
}

 

多态的特点:

1:编译时期,参考引用型变量所属的类是否有调用的方法,如果有,则编译通过,没有则编译失败

2:运行时期,参考对象所属类中是否有调用的方法。

3:总之,成员非静态方法在多态调用时,编译看左边,运行看右边

在多态中,成员变量的特点,无论编译和运行参考左边(引用型变量所属的类)。

在多态中,静态成员函数特点,无论编译和运行都参考左边

多态可以作为参数传入,可以作为返回值传出。(这部分在集合中体现的更为清晰,建议同集合部分一起食用,效果更佳 ̄へ ̄)

 

 

 

多态可以实现隐式与显式的类型转换。向上转型为父类/接口,访问范围变小;向下转型为子类,访问范围变大,但需要强转。

Animal animal = new Person();
Person person = (Person) animal;

instanceof关键字:判断对象是否属于某个类

1:属于比较运算符:

2:instanceof关键字:该关键字用来判断一个对象是否是指定类的对象。

3:用法:对象 instanceof 类;

public class Test1 {
    public static void main(String[] args) {
        Animal animal = new Person();
        System.out.println(animal instanceof Person); // true
    }
}

该表达式是一个比较运算符,返回的结果是boolean类型 true|false

注意:使用instanceof关键字做判断时,两个类之间必须有关系,否则会在编译期报错。

 

class Person extends Animal {
    public static void say() {
        System.out.println("person。。。");
    }
}

class Pig {
    public static void say() {
        System.out.println("噜噜噜。。。");
    }
}

public class Test1 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person instanceof Pig); // 编译报错
    }
}

205704_dpff_3041734.png

 

 

转载于:https://my.oschina.net/LinkedBear/blog/1615176

单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户在登录一个应用程序后,无需再次输入凭据即可访问其他应用程序。在微服务架构中,使用OAuth 2.0来实现单点登录是一种常见的做法。OAuth 2.0本来是用于第三方应用请求服务的认证授权机制,但也可以用于实现同一个应用内部服务之间的认证。通过OAuth 2.0,我们可以在一个应用中获取访问令牌,然后将该令牌用于其他应用的认证。这样,用户只需要登录一次,就可以访问整个系统的各个服务。 在实现单点登录的过程中,我们需要配置一些参数。在应用的配置文件(如application.properties)中,我们可以设置以下参数: - server port:指定应用的端口号。 - security.oauth2.client.client-id:指定客户端的唯一标识符。 - security.oauth2.client.client-secret:指定客户端的密钥。 - security.oauth2.client.access-token-uri:指定用于获取访问令牌的URI。 - security.oauth2.client.user-authorization-uri:指定用于用户授权的URI。 - security.oauth2.resource.user-info-uri:指定用于获取用户信息的URI。 通过配置这些参数,我们可以实现单点登录的功能,让用户在登录一个应用后,可以无需再次登录即可访问其他应用。这样可以提高用户的体验,并减少重复登录的次数。 引用\[1\]中提到了使用OAuth 2.0来实现单点登录的思路,引用\[2\]中给出了一些配置参数的示例,可以根据实际情况进行配置。引用\[3\]中解释了单点登录的概念和优势。 #### 引用[.reference_title] - *1* [OAuth2.0 实现单点登录](https://blog.csdn.net/qq15035899256/article/details/129541483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [大白话唠唠 Oauth2 与授权认证的那些事儿!](https://blog.csdn.net/qq_42046105/article/details/110211641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [微服务单点登录实现](https://blog.csdn.net/qq_61393507/article/details/121869165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值