抽象类

Java基础之六、Java编程思想(8-10)

五迷三道 提交于 2020-02-25 22:51:14
八、多态 多态 (也称作 动态绑定 、 后期绑定 或 运行时绑定 ) 域(成员变量)是不具有多态性的,只有普通的方法调用是多态的,任何域访问操作都将由编译器解析,因此不是多态的 静态方法也是不具有多态性的   public static void main(String[] args){     Super sup = new Sub(); // Upcast     System.out.println("sup.field = " + sup.field + ". sup.getField() = " + sup.getField() );// sup.field返回父类的成员值,虽然子类也定义了同名成员, sup.getField()访问子类的重写方法   } 九、接口 1:在class前添加abstract关键字,定义成抽象类。 抽象类不能实例化,即不能通过new生成对象,但 注意可以追加{}生成匿名实现类 ,仍然不是它自己的实例化。 抽象类可以有构造函数,但不能直接调用,通常由实现类构造函数调用。 抽象类的方法前添加abstract关键字,定义抽象方法,派生类必须重写该方法,然后才能实例化。Java类中如有抽象方法,则类符号前必须也要添加abstract关键字,定义为抽象类(可以没有抽象方法)。 抽象类中可以没有抽象方法, 即可以全部是含方法体的非抽象方法

JAVA面试题及参考分析-JAVA基础篇-1

落爺英雄遲暮 提交于 2020-02-25 21:53:53
1.抽象和封装的不同点 抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。 2.重载和重写的区别 重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。 3.字符型常量和字符串常量的区别 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)4.成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰;从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存

JAVA面试宝典-基础篇(二)

爱⌒轻易说出口 提交于 2020-02-25 11:09:01
11 、 "==" 和 equals 方法究竟有什么区别? (单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) == 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 == 操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如 Objet obj = new Object(); 变量 obj 是一个内存, new Object() 是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用 == 操作符进行比较。 equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码: String a=new String("foo"); String b=new String("foo"); 两条 new 语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b

php抽象类与接口的区别

别说谁变了你拦得住时间么 提交于 2020-02-25 07:27:28
1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。 2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。 3、接口没有构造函数,抽象类可以有构造函数。 4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。 5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。 抽象类还是接口。 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。 如果必须从多个来源继承行为,就使用接口。 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。 来源: https://www.cnblogs.com/phpcoder/p/4466992.html

面向对象小结

こ雲淡風輕ζ 提交于 2020-02-24 23:07:02
面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。 [万物皆对象] 面向对象三大特征:封装、继承、多态 类和对象的关系: 类:对现实生活中事物的描述 对象:就是这类事物,实实在在存在个体 描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同 称为类的成员(成员变童和成员方法) 成员变量作用于整个类中,局部变量作用于函数中,或者语句中 成员变量在堆内存中,因为对象的存在,才在内存中存在 局部变量:存在栈内存中 封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 好处:将变化隔离、便于使用、提高重用性、提高安全性 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问 private (私有):权限修饰符,用于修饰类中的成员(成员变里,成员函数),私有只在本类 中有效。 static用于修饰成员(成员变里和成员函数) 被儋饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类 名调用。 类名.静态成员[方法区、共享区、数据区]_--存放类中的方法和共享数据。 什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功 能可以定义成静态的,用类名直接调用。 继承: 1、提高了代码的复用性 2、让类与类之间产生了关系,有了这个关系

抽象类

回眸只為那壹抹淺笑 提交于 2020-02-24 05:56:35
1.当用abstract来修饰一个类时,这个类就是抽象类。当abstract来修饰一个方法时,这个方法就是抽象方法。 2.含有抽象方法的类必须被定义为抽象类, 抽象类必须被继承,抽象方法必须被重写 3.抽象类不能被实例化,只能被子类继承。 4.抽象方法只需声明,无需实现,抽象方法没有方法体 例,在同一个包下定义一个Shape.java文件 public abstract class Shape { { System.out.println("执行Shape的初始化块"); } //定义一个计算周长的抽象方法 public abstract double calPerimeter(); //定义一个返回形状的抽象方法 public abstract String getTyp(); } 再定义一个Triangle.java文件 public class Triangle extends Shape{ //定义三边 private double a; private double b; private double c; public Triangle(double a,double b , double c) { this.setSides(a,b,c); } public void setSides(double a, double b , double c){ if (a >=

java_抽象类

笑着哭i 提交于 2020-02-24 05:55:34
抽象类 1,语法定义 抽象类前使用abstract关键字修饰,则该类为抽象类 2.应用场景 (1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。 (2)从多个具有相同特征的类抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性 3.作用 限制规定子类必须实现某些方法,但不关注实现细节 (主要目的:不关注子类的实现。但是要约束子类必须要有哪些子类) 4.适用方法(使用规则) (1)abstract定义抽象类 (2)abstract定义抽象方法,只声明,不需要实现 (3)包含抽象方法的类都是抽象类 (4)抽象类中可以包含普通的方法,也可以没有抽象方法 (5)抽象类不能直接创建,可以定义引用变量 **抽象类没没有方法体,但是以分号结束 ***小技巧 "syso+alt+/"System.out.println("");快捷键 在创建子类时,勾选Browse选择父类名称 在创建子类时,勾选abstract直接生成抽象类 创建测试类(Initail类main方法)时,勾选public static void main(String[] args)直接生成: public static void main(String[] args) { // TODO Auto-generated method stub } public

Java学习--抽象类和接口

醉酒当歌 提交于 2020-02-24 05:52:07
https://www.cnblogs.com/dolphin0520/p/3811437.html 抽象类 先了解一下【抽象方法】—一种特殊的方法,只有声明,没有具体的实现 abstract void fun(); 抽象方法必须用abstract关键字进行修饰 抽象类—包含抽象方法的类,在类前用abstract关键字修饰 抽象类不能用来创建对象(因为他含有无具体实现的方法) abstract class ClassName { abstract void fun(); } 对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法 注意,抽象类和普通类的主要有三点区别:  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。  2)抽象类不能用来创建对象;  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。  在其他方面,抽象类和普通的类并没有区别。

Java面试整理

﹥>﹥吖頭↗ 提交于 2020-02-24 05:05:59
Java面试题汇总 一 Java基础知识 1、JDK和JRE有什么区别? 1)JDK: Java Development Kit 的简称,Java开发套件(工具包),他提供二Java的开发环境和运行环境。 2)JRE:Java Runtime Environment 的简称,Java运行环境,为Java的运行提供了所需环境。 具体来说JDK其实包含了JRE,同时还包含了编译java源码的编译器javac,还包含了许多Java程序调试和分析的工具,简单来说,如果要运行Java程序只需要安装JRE就可以。若要编写Java程序,则需要安装jdk。 2 = = 和equals()方法的区别是什么? 1)对于 = = ,比较的是值是否相等 基本数据类型的变量(byte、int、long、short、char、double、boolean、),则直接比较其存储的“值”是否相等; 引用类型的变量,则比较的是所指向的对象的地址。 2)对于equals()方法 注意equals()方法不能作用于基本类型的变量,equals继承Object类,(重写了equals方法)比较的是 是否是同一个对象,即对象的内容。如果没有对equals方法进行重写,则比较的是引用类型的变量所指的对象的地址; 诸如String、Date等对equals方法进行了重写的话,比较的是所指向的对象的内容。 3

Java基础学习--抽象类与抽象函数

爱⌒轻易说出口 提交于 2020-02-24 05:04:27
抽象类的作用是强制定义了其子类的实现要求(抽象类中有一些抽象方法,子类若想继承自抽象类则必须覆盖这些方法。在实际开发中,几乎不会使用普通类来定义子类,大多数都是继承抽象类) 规范:abstract class A {        public abstract void fun1();        public void fun2() {          System.out.println("hello");        }      } 抽象类不能制造对象,但是可以定义变量,赋给这个变量的一定是他非抽象子类的对象; 抽象类中的抽象函数没有函数体,例如:public abstract void move(); 一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的。 抽象类中所有的的抽象函数必需子类的覆盖,而非抽象函数不需要覆盖。因为子类会继承父类的函数,如果不去覆盖继承来的抽象函数,那么子类就含有抽象函数,含有抽象函数的类必须要声明为抽象类。 设计这样的抽象类主要是为了防止制造它的对象出来。 有抽象方法的类一定是抽象类!(有abstract修饰的方法,并且方法没有方法体,这样的类一定是抽象类,并且类前面一定要有abstract来修饰) 但抽象类不一定有抽象方法(有abstract来修饰的类一定是抽象类,但抽象类里不一定有抽象方法) 相关说明: