抽象方法

Java核心技术第五章——1.类、超类、子类(2)

末鹿安然 提交于 2020-02-01 17:10:35
继上一篇 Java核心技术第五章——1.类、超类、子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法。 2.编译器将查看调用方法提供的参数类型(args)。 3.根据参数类型匹配所有名为Method的方法。 4.如果编译器没有找到与参数类型匹配的方法,或者发现经过类型转换后有多个方法与之匹配,就会报告一个错误。 7.阻止继承:final类和方法。 1.final类:当你不希望别人利用某个类定义子类。那么则使用final去修饰类。此类则不允许扩展,称为final类。(final类的方法默认为final方法) 2.final方法:类中的方法也可以被声明为final。如果这样做,那么子类就不能覆盖这个方法(前提不是final类) 8.强制类型转换 例如 : double x = 6.66; int nx = (int) x; //转换成功 此表达式x的值转成整数类型,舍弃了小数部分。 例如: List<Object> obj = new ArrayList(); obj.add("hello"); obj.add(666); int i = (Integer)obj.get(0);//error 类型转换错误 ClassCastException 假如你不清楚obj数组引用的对象

48.抽象方法和抽象类

自作多情 提交于 2020-02-01 00:32:16
抽象方法 使用abstract修饰的方法,没有方法体,只有声明 抽象类 包含抽象方法的类就是抽象类 有抽象方法的类只能定义成抽象类 抽象类不能实例化,即不能用new来实例化抽象类。 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。 抽象类只能用来被继承。 抽象方法必须被子类实现。 package OOprogress2 ; public class testAbstractClassAndFunction { public static void main ( String [ ] args ) { // Animal2 a = new Animal2(); //error 抽象不能new实例化对象 Animal2 a = new Dog2 ( ) ; a . shout ( ) ; //包装类 //Integer i; //extends Number(抽象类 ) } } //抽象类 abstract class Animal2 { //抽象方法 abstract public void shout ( ) ; //抽象类中也可有普通方法 public void run ( ) { System . out . println ( "跑啊跑!" ) ; } } class Dog2 extends Animal2 { @Override

Java 学习多态笔记

风格不统一 提交于 2020-01-31 09:30:42
一. 多态 同一个对象在不同时期表现的出不形态,要构成多态必须满足以下三个前提 1.要有继承或实现 2.有方法的重写 3.有父类的引用指向对象 eg: public class Animal { public String name ="动物"; public void Eat(){ System.out.println("我是"+name); System.out.println("吃东西"); } } public class Cat extends Animal { // 1.有继承 public void Eat(){ // 2.有方法重写 System.out.println("猫吃鱼"); } } public class DuoTaiDemo { public static void main(String[] args) { Animal a = new Cat(); // 3. 有父类引用指向 a.Eat(); } } 二.多态的成员访问特点: 对于成员变量:编译看左边,执行也看左边 (以左边的类为准,调用的都是左边类中的成员方法 即 Animal 类中的成员变量) 对于成员方法:编译看左边,执行也看右边 (以左边的类为准,去编译如果没有方法会报错,但是执行的时候是调用的左边的的方法,因为方法 被重写 即执行Cat类中的Eat()方法) 三.多态的好处和弊端 好处

普通类,抽象类和接口之间的区别

删除回忆录丶 提交于 2020-01-31 05:31:04
一、普通类、抽象类和接口区别: 1. 普通类可以实例化,接口都不能被实例化(它没有构造方法),抽象类如果要实例化,抽象类必须指向实现所有抽象方法的子类对象(抽象类可以直接实例化,直接重写自己的抽象方法),接口必须指向实现所有所有接口方法的类对象。 2. 抽象类要被子类继承,接口要被子类实现。 3. 接口只能做方法的声明,抽象类可以做方法的声明,也可以做方法的实现。 4. 接口里定义的变量只能是公共的静态常量,抽象类中定义的变量是普通变量。 5. 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类的抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如果不能全部实现接口方法,那么该类只能是抽象类。 6. 抽象方法只能声明,不能实现。接口是设计的结果,抽象类是重构的结果。 7. 抽象类里可以没有抽象方法。 8. 如果一个类里有抽象方法,那么该类只能是抽象类。 9. 抽象方法要被实现,所以不能是静态的,也不能是私有的。 10. 接口可以继承接口,并可多继承接口,但类只能单继承。(重要啊) 11. 接口中的常量:有固定的修饰符-public static final(不能用private和protected修饰/本质上都是static的而且是final类型的,不管加不加static修饰)。 12. 接口中的抽象方法:有固定的修饰符-public abstract 。

Lamabda表达式的学习

蹲街弑〆低调 提交于 2020-01-31 01:10:21
使用前提: 1.使用Lamabda必须要有接口,且要求接口中有且仅有一个抽象方法。(无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当借口中的抽象方法存在且唯一时,才可以使用Lamabda。) 2.使用Lamabda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lamabda对应的接口类型,才能使用Lamabda作为该接口的实例。 备注: 有且仅有一个抽象方法的接口,称为 "函数式接口" Lamabda函数是可推导可省略 省略规则: 1.小括号内参数的类型可以省略 2.如果小括号内有且仅有一个参,则小括号可以省略 3.如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号,return关键字及语句分号。 来源: CSDN 作者: WeiLGHui 链接: https://blog.csdn.net/qq_43597675/article/details/104117546

Java自学.接口学习笔记!

↘锁芯ラ 提交于 2020-01-31 00:04:30
接口学习笔记 文章目录 接口学习笔记 1.接口的概述与生活中的举例 2.接口定义的基本格式 3.接口的抽象方法 3.1接口抽象方法的定义 3.2接口的抽象方法使用 4.接口的默认方式 4.1接口的默认方法定义 4.2接口的默认方法使用 5.接口的静态方法 5.1 接口的静态方法定义 5.2接口的静态方法使用 7. 接口的私有方法 7.1接口的私有方法定义 7.1.1接口的普通私有方法定义 7.1.2接口的静态私有方法定义 7.2接口的普通私有方法使用静态私有方法执调用 8.接口的常量 8.1接口的常量的定义 8.2接口的常量的使用 9.接口内容小结 1.接口的概述与生活中的举例 接口的概述与生活中的举例 生活中举例 电源擦桌当中的电源接口 ,不管是手机还是电脑还是其他电器、充电或者使用都学要使用电源接口。因为在制作电器过程中他们的接口都是统一的符合国家标准的,只要符合规范标准就可以大家通用。 再例如U盘 只要符合USB接口标准 那么各种设备都可以使用。 所以接口就是一种公共的规范标准 ! 2.接口定义的基本格式 Interface 接口 接口是多个类的公共规范。 接口是一个引用数据类型 最重要的内容就是其中的:抽象方法。 如何定义一个接口: 格式 public interface 接口名称 (){ 接口内容 } 3.接口的抽象方法 3.1接口抽象方法的定义

13:接口

时光毁灭记忆、已成空白 提交于 2020-01-30 08:04:32
1:java接口 package com . edu . cn ; /* 接口是多个类公共规范。 接口是一种引用数据类型,最重要的内容在其中:抽象方法。 如何定义一个接口的格式 public interface 接口名称{ //接口内容。 } 备注:换成了关键字interface之后,编译生成的字节码文件仍然是.java ---> .class 如果是java7,那么接口可以包含有; 1:常量 2:抽象方法 如果是java8,还可以额外包含有: 3:默认方法 4:静态方法 如果是java,还可以包含有: 5:私有方法 */ /* 接口使用步骤: 1:接口不能直接使用,必须有一个“实现类”来“实现”该接口 格式: public class 实现类名称 implements 接口名称 { // .... } 2:接口的实现类必须覆盖重写(实现)接口所有的抽象方法。 实现,去掉abstract关键字,加上方法体大括号。 3:创建实现类的对象,进行使用。 */ public class Demo01Interface implements MyInterfaceAbstract { @Override public void methodAbs1 ( ) { System . out . println ( "第一个方法!" ) ; } @Override public void

2020-01-29

拜拜、爱过 提交于 2020-01-30 07:31:46
自己的一些面试总结 线程 多线程 线程的创建方式 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和future创建线程 4.使用线程池例如用Executor框架 线程怎么启动 Thread.start();//开启线程 Thread.run();当普通方法的方式调用 线程的状态(就绪、运行、阻塞、结束) 1.新建状态:当用new操作符创建一个线程时,线程还没有开始运行,此时线程处在新建状态 2.就绪状态:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态 3.运行状态 当线程获取cpu时间后,他才进入运行状态,真正开始执行run()方法 4,阻塞状态:线程运行过程中,肯峨眉号各种原因进入阻塞状态; sleep方法进入睡眠状态 线程在等待某个触发条件 线程的同步 同步就是发出一个功能调试时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。 线程、进程的区别 线程和进程都是一个时间段的描述,是cpu工作时间段的描述。 进程的颗粒太大

c#基础语言编程-多态

南笙酒味 提交于 2020-01-29 15:51:55
语言中的多态性是为了使程序有扩展性,为实现多态性,在程序中体现为接口、抽象类、父类、具体类。 接口就是一种规范,解决了多重继承的问题,类似一种规范,告诉我要做什么,具有什么能力,在接口中定义写行为属性。 接口的特性 接口类类似抽象类,不能实例化接口;接口中的方法都是抽象方法,继承于此接口的非抽象类必须实现接口中所有成员。 接口只能包含方法(属性、事件、索引器最终都是方法),不能有字段、常量、构造函数和析构函数、静态变量,但是可以有委托和事件。 接口中成员不许有访问修饰符,默认为public,手动添加会编译出错。 接口中成员只有定义,没有任何实现,像抽象类一样 实现接口的类,直接实现接口中的方法,不用写override。 当显示该接口的成员时,实例成员不能通过类实例访问(不提倡用类实例访问,这样就无法体现多态性),只能通过接口实例访问,显示实现默认是private。当隐示实现接口成员,两者实例都能访问,但是要将成员表示为public。 比如: public class Person : IFace1, IFace2 { public void Fly() { Console.WriteLine("实现了IFace1中的Fly方法。"); } //显示实现接口的访问修饰符默认是没有的,类中成员没有写访问修饰符这默认就是private /

java_9:抽象类和抽象方法

社会主义新天地 提交于 2020-01-29 13:46:52
一、abstract关键字的使用 1.abstract可以可以用来修饰的结构:类、方法 2.abctract修饰类——抽象类 》此类不能实例化 》 抽象类中一定有构造器 ,便于子类实例化时调用(类中一定会有构造器) 》开发中,都会提供抽象类的子类,让子类实例化,完成相关操作 3.abstract修饰方法——抽象方法 》抽象方法只有方法的声明,没有方法体 》包含抽象方法的类一定是抽象类,反之,抽象类中可以没有抽象方法 》若子类重写了父类的所有抽象方法,子类方可实例化 若子类没有重写父类所有的抽象方法,则此子类也是一个抽象类,需要用abstract修饰 public abstract Person{//抽象类 abstract public void eat();//抽象方法 } 二、abstract使用上的注意点 (1)abstract不能用来修饰属性、构造器等结构 (2)abstract不能用来修饰私有方法(不能被重写),静态方法(static方法不能被重写)、 final的方法(不能被重写)、final的类(不能被继承) (3)一定会用到继承 三、抽象类的匿名子类 好处:省事,如果子类只用一次,就不用再单独造一个出来 Person p=new Person(){//创建匿名子类的非匿名对象 @Override public void eat() { System.out