目录
多态
对象多态
对于多态,可以总结它为:
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
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);
}
}
}
内部类成员访问
·内部类中,访问外部类成员:直接访问,包括私有
·外部类中,访问内部类成员:需要创建对象访问