写点什么

Java 多态大乱炖,mysql 基础教程视频

用户头像
极客good
关注
发布于: 刚刚

public class MyTwo extends MyNum{


public void show() {


System.out.println("two show....");


}


public void fly(){


System.out.println("飞....");


}


}


public class Test {


//方法参数的类型是父类,这是多态的主要应用


public static void say(MyNum ni){


ni.show();调用指向的对象内的方法。前提是父类即模板中有该方法


ni.fly();//报错,父类中无该方法。需


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


要转换


//判断对象的真实类型 对象引用 instanceof 类型


if(ni instanceof MyTwo){


//将 ni 引用的对象,强制类型转换


MyTwo t=(MyTwo) ni;


t.fly();


}


}


// public static void say(MyOne ni){ ni.show();}类型不匹配,不被调用


public static void main(String[] args) {


//引用多态语法


MyNum x=new MyTwo();//x 的类型是 MyNum


x.show();


x=new MyOne();


x.show();


say(x);//x 按类型匹配,与指向的对象无关。


}


}


(生成 setter 方法快捷键 alt+insert)


JavaOOP 三大特性:封装、继承和多态;


封装:使用类封装自定义属性和方法;包封装多个类等等;


继承:子类继承父类;


多态:一个父类或接口类型的变量,能够存储多个子类或实现类对象引用;


多态作用,提高代码可以重用性;


多态语法:一个变量引用多种对象(有关联关系);


多态用法:主要用于在方法的参数上使用多态语法,提高代码可重用性;


注意:可以 instanceof 判断变量的具体类型,通过强制转换;


四 java 的 interface


java 中引入接口弥补 java 单继承,父子类必须血缘关系特点;现实中多个不同种类的对象在方法上有相似之处,引入抽取相同方法接口(interface)


用法:一个类可以实现一个或多个接口,但是要求必须重写所有抽象方法;


注意:?java 中类和接口(除了内部类外),访问修饰符只支持 public 和默认;


//java 中接口可以扩展多个接口:public interface IAction extends ?Isky,ILand


接口变量默认添加以下三个关键字?public static final 称常量变量。


接口中的抽象方法,默认有 public? abstract 关键字? ?


jdk1.8 中接口中可以使用 default method,可以被调用???public default String nihao ( ){? return "你好!"; }


面试题,抽象类和接口区别?


.语法层面上的区别


1)抽象类可以提供成员方法的实现细节,而接口中只能存在 public abstract 方法;


2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的;


3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;


4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。


2.设计层面上的区别


1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类 Airplane,将鸟设计为一个类 Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口 Fly,包含方法 fly( ),然后 Airplane 和 Bird 分别根据自己的需要实现 Fly 这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承 Airplane 即可,对于鸟也是类似的,不同种类的鸟直接继承 Bird 类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。


2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过 ppt 里面的模板,如果用模板 A 设计了 ppt B 和 ppt C,ppt B 和 ppt C 公共的部分就是模板 A 了,如果它们的公共部分需要改动,则只需要改动模板 A 就可以了,不需要重新对 ppt B 和 ppt C 进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。


举例:门和警报的例子:门都有 open( )和 close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念,但是现在如果我们需要门具有报警 alarm( )的功能,那么该如何实现?


从这里可以看出,?Door 的 open() 、close()和 alarm()根本就属于两个不同范畴内的行为,open()和 close()属于门本身固有的行为特性,而 alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含 alarm()行为,Door 设计为单独的一个抽象类,包含 open 和 close 两种行为。再设计一个报警门继承 Door 类和实现 Alarm 接口。


4.2 java 中关键字


static, 修饰代码块,变量,方法,内部类;


final,表示最终不能修改,可以修饰类(该类不能继承)、变量(常量变量)、方法(不能重写,即不能修饰接口中的方法,可以重载)


面试题:? 多态存在的三个必要条件?


①要有继承,或实现;②要有重写;③父类引用指向子类对象


5 java 中内部类:


1.成员内部类:与类中属性和方法并列内部类;


实例化成员内部类,首先先实例化外部(MTree 是外部类,node 是内部类)


MTree mt=new MTree()


MTree.Node n=mt.new Node();? ? ? //错误的 MTree.Node node=mt.new MTree.Node();


2.静态内部类:静态内部类 static 表示当前类的实例化 脱离外部类存在


调用其中的方法也需要 new。


3.局部内部类:位于方法或代码块里


4.匿名内部类:


通常用于异步控制上,图形编程,多线程编程;特点,提供抽象类或接口作为模板,然后在方法中的参数指定该抽象类或接口;


当方法执行时,直接在方法中使用匿名内部类


public class Demo03 extends JFrame {


private JButton btn;


public Demo03(){


this.setTitle("我是一个窗口");


this.setSize(350,300);


btn=new JButton();


btn.setSize(100,30);


btn.setText("你点击我了吗?");


Container panel = this.getContentPane();


panel.add(btn);


//向按钮添加点击事件


btn.addActionListener(new ActionListener() {


@Override


public void actionPerformed(ActionEvent e) {


JOptionPane.showMessageDialog(Demo03.this,"你敢点我!");


}


});

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java多态大乱炖,mysql基础教程视频