子类继承父类的所有 public 和 protected 变量和方法(但是不包括构造函数)。子类可以重写父类的任何非 final 方法。一个类只能扩展一个其他类,但一个接口可以继承多个接口。...如果一个成员变量是static的,那么我们可以通过‘类名.成员变量名’的方式来使用它。 3.8.2、static修饰方法 static修饰的方法叫做静态方法。...静态方法只能继承,不能重写(Override),因为重写是用于表现多态的,重写只能适用于实例方法,而静态方法是可以不生成实例直接用类名来调用,这就会与重写的定义所冲突,与多态所冲突,所以静态方法不能重写...所以,通常,static 关键字意味着应用它的实体在声明该实体的类的任何特定实例外部可用。 可以从类的外部调用 static 方法,而不用首先实例化该类。这样的引用始终包括类名作为方法调用的限定符。...可以不使用完全限定的类名来引用导入的类。 当多个包包含同名的类时,许多 Java 程序员只使用特定的 import 语句(没有“*”)来避免不确定性。
答案:静态变量被类的所有实例共用,静态类只能访问类的静态变量,或调用类的静态方法。 Q4:什么是数据封装及其意义? 答案:封装是面向对象编程中用于在单个单元中组合属性和方法。...Q27:一个类可以有多个构造函数吗? 答案:是的,一个类可以有多个具有不同参数的构造函数,创建对象的构造函数取决于创建对象时传递的参数。 Q28:我们可以覆盖类的静态方法吗?...答案:使用继承的主要优点是代码的可重用性,因为继承使子类能够重用其父类的代码。多态性(可扩展性)是另一个好处,允许引入新的功能而不影响现有的派生类。 Q49:类的变量和方法的默认访问说明符是什么?...答案:Java不会给变量分配默认值,因此变量没有初始化的情况下,程序会编译失败并给出错误提示。 Q65:Java中的类可以继承多个类吗? 答案:Java不支持多重继承。...答案:Java类中没必要定义析构函数,它有自己的垃圾回收机制,当不再引用对象时,会自动执行。 Q75:Java中变量可以既是局部变量又是静态变量吗?
这是好的语言设计,因为你不应该改变方法的参数。但是你可以用相同的名称定义另一个变量,并按照你想要的方式初始化。现在,在这个方法级别的范围中你拥有两个叫做 num 的变量。...一个 Java 程序员来到 Kotlin 阵营。 “嗨,Kotlin。我是新来的,有静态成员可用吗?”他问。 “没有。我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。...“好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?” “它是与类绑定的一个单例对象。...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”...可能是因为 Java 程序员过度使用了继承,可能你应该在允许类被继承之前想想清楚。不过我们生活在框架和时代,而框架往往喜欢 AOP。
包装器类将Java原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些称为包装器类,因为它们将原始数据类型“包装”到该类的对象中。...下面我列出了它的一些优点: 软件包有助于避免名称冲突 它们提供了更容易的代码访问控制 包还可以包含隐藏类,这些隐藏类对外部类不可见,仅在包内使用 创建适当的层次结构,使查找相关类更加容易...该类的每个对象都将在使用它时创建它自己的变量副本。因此,对该变量所做的任何更改都不会反映在该类的任何其他实例中,而只会绑定到该特定实例。...如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。 Q26。区分Java中的静态方法和非静态方法。 静态方法 非静态方法 1....3.它可以访问任何静态方法和任何静态变量,而无需创建类的实例 Q27。
包装器类将Java原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些称为包装器类,因为它们将原始数据类型“包装”到该类的对象中。...下面我列出了它的一些优点: 软件包有助于避免名称冲突 它们提供了更容易的代码访问控制 包还可以包含隐藏类,这些隐藏类对外部类不可见,仅在包内使用 创建适当的层次结构,使查找相关类更加容易 Q12...该类的每个对象都将在使用它时创建它自己的变量副本。因此,对该变量所做的任何更改都不会反映在该类的任何其他实例中,而只会绑定到该特定实例。...如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。 ? Q26。区分Java中的静态方法和非静态方法。 静态方法 非静态方法 1....3.它可以访问任何静态方法和任何静态变量,而无需创建类的实例 Q27。
包装器类将Java原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些称为包装器类,因为它们将原始数据类型“包装”到该类的对象中。...下面我列出了它的一些优点: 软件包有助于避免名称冲突 它们提供了更容易的代码访问控制 包还可以包含隐藏类,这些隐藏类对外部类不可见,仅在包内使用 创建适当的层次结构,使查找相关类更加容易 Q12。...该类的每个对象都将在使用它时创建它自己的变量副本。因此,对该变量所做的任何更改都不会反映在该类的任何其他实例中,而只会绑定到该特定实例。...如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。 Q26。区分Java中的静态方法和非静态方法。 静态方法 非静态方法 1....3.它可以访问任何静态方法和任何静态变量,而无需创建类的实例 Q27。
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。...总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 ...抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。 ...靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法...而且,方法上的synchronized同步所使用的同步锁对象是this,而抽象方法上无法确定this是什么。 19、内部类可以引用它的包含类的成员吗?有没有什么限制? 完全可以。
但是可以直接访问静态的变量、调用静态的方法; 普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。...Static可以修饰内部类、方法、变量、代码块 Static修饰的类是静态内部类 Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用...Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。...抽象类只能被继承,一个类只能继承一个抽象类。 接口: 全部的方法都是抽象方法,属型都是常量 不能实例化,可以定义变量。...接口变量可以引用具体实现类的实例 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法 接口之间可以多实现 一个具体类可以实现多个接口,实现多继承现象 95.线程同步的方法 wait():让线程等待
1>构造方法的名称必须和类名相同; 2>构造方法没有返回类型约定,可以有参数列表,只是为了创建对象而存在,并为对象属性初始化的特殊方法; 3>当我们创建一个类的时候,如果我们不手动添加构造方法,那么系统会自动为我们提供一个默认的不带参的构造方法...答:1>都要求方法名相同,都可以用于抽象方法和非抽象方法之间 2>重写要求参数列表必须一致,而重载要求参数列表必须不一致 3>重写要求返回类型必须一致,而重载对此不做限制 4>重写只能用于子类重写父类的方法...,而重载用于同一个类的所有方法(包括从父类中继承而来的方法) 5>重写对方法的访问修饰符有特殊要求,而重载对此不做限制 6>父类的一个方法只能被同一个子类重写一次,而一个方法在所在的类中可以被重载多次...例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。 45、final修饰的方法能不能被继承?...抽象类可以没有抽象方法,但含有抽象方法的类必须申明为抽象类。 51、静态内部类可以有静态成员,而非静态内部类则不能有静态成员对吗?为什么? 答:对!
今天就来一起来回顾下java的基础知识: java有什么特性,继承有什么用处,多态有什么用处 反射是什么,在哪里用到,怎么利用反射创建一个对象 静态方法,静态属性可以被继承吗 java有什么特性,继承有什么用处...这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息 ❝程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言 ❞ 哪里用到 注解框架,插件化,Hook...反射创建对象 Class c = User.class; User u = c.newInstance(); 静态方法,静态属性可以被继承吗 首先,父类的静态属性和方法是可以被子类继承的,...多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。...静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。
能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。...重载和重写都允许你用相同的名称来实现不同的功能,但是重载是编译时活动,而重写是运行时活动。你可以在同一个类中重载方法,但是只能在子类中重写方法。重写必须要有继承。...120)Java 中,嵌套公共静态类与顶级类有什么不同? 类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公共类,并且顶级公共类的名称与源文件名称必须一致。...一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求。...一个嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如 HashMap.Entry 是一个嵌套静态类,HashMap 是一个顶级类,Entry是一个嵌套静态类。
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。...final修饰的方法不能被子类重写 final修饰的类不能被继承。 this this.属性名称指访问类中的成员变量,可以用来区分成员变量和局部变量。...1、语法层面上的区别 抽象类可以有方法实现,而接口的方法中只能是抽象方法; 抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型; 接口中不能含有静态代码块以及静态方法...,而抽象类可以有静态代码块和静态方法; 一个类只能继承一个抽象类,而一个类却可以实现多个接口。...如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是具备不具备的关系,比如鸟是否能飞。 继承抽象类的是具有相似特点的类,而实现接口的却可以不同的类。
这就是纯虚函数的作用。 纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。 凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。...而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。...; 3) 定义位置 普通成员变量存储在栈或堆中,而静态成员变量存储在静态全局区; 4) 初始化位置 普通成员变量在类中初始化;静态成员变量在类外初始化; 5) 默认实参 可以使用静态成员变量作为默认实参...而引用更容易使用,更清晰。 167、你知道数组和指针的区别吗?...抽象类不能用于实例化对象,否则会报错。抽象类一般用于定义一些公有的方法。子类继承抽象类也必须实现其中的纯虚函数才能实例化对象。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。...总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 11、是否可以从一个static方法内部发出对非static方法的调用? 不可以。...静态内部类只能定义在和属性同级,普通内部类可以定义在除参数位置以外的任意位置 3. 静态内部类必需有名称,而普通内部类可以是匿名的 4....静态内部类没有this引用,只此只能访问外部类的静态成员,而普通内部类可以访问外部类的全部成员 5....静态内部类可以定义静态方法,而普通内部类不能定义静态方法 23、内部类可以引用它的包含类的成员吗?有没有什么限制? 1.
公开声明的变量或方法可在应用程序中的任何位置访问。静态声明的变量或方法可以全局访问,而无需创建类的实例。默认情况下,静态成员不可全局访问,这取决于所使用的修改的访问类型。...一个对象是一个类的实例,通过它我们可以访问该类的方法。“新建”关键字用于创建对象。在内存中创建对象的类将包含有关该类的方法,变量和行为的信息。...反序列化是从字节流中创建对象的反向过程。 12、我们可以在静态方法中使用“ this”命令吗? 我们不能在静态方法中使用’This’,因为我们只能在静态方法中使用静态变量/方法。...我们可以轻松地将自定义控件添加到多个应用程序(如果共享的Dll)。因此,如果它们是私有的,那么我们可以将其复制到dll到Web应用程序的bin目录中,然后添加引用并可以使用它们。...委托是必需的,因为它们可用于编写更多通用的类型安全函数。 34、如何在C#中将一个类继承到其他类? 冒号在C#中用作继承运算符。只需放置一个冒号,然后放置类名。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。...靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法...一个类可以实现多个接口,但只能继承一个抽象类。 下面接着再说说两者在应用上的区别: 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。...我想可能是既然静态成员类似c语言的全局变量,而内部类通常是用于创建内部对象用的,所以,把“全局变量”放在内部类中就是毫无意义的事情,既然是毫无意义的事情,就应该被禁止),内部类可以直接访问外部类中的成员变量...然后再说一些细节方面的知识,例如,几种定义方式的语法区别,静态内部类,以及匿名内部类。 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 完全可以。如果不是静态内部类,那没有什么限制!
不使用 static 修饰的普通方法,成员变量则属于该类的单个实例,而不属于该类。因为通常把不使用 static修饰的成员变量和方法也成为实例变量,实例方法。 对象的this引用是什么?...static 是一个特殊的关键字,它可用于修饰方法,成员变量等成员。static 修饰的成员表明他属于这个类本身,而不属于该类的单个实例。...当构造器的执行体结束后,这个对象作为构造器的返回值而被返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。 super限定的用处?...当把一个子了i对象那个直接赋给父类引用变量时,运行时调用该引用变量的方法是,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征。 instanceof 运算符是干什么的?...判断是否是可以成功转换 instanceof 运算符的前一个操作数通常是一个 引用类型变量,后一个操组数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是否是后面的类,
不 数据类 开放类 陡峭的学习曲线 名称遮掩 这是 Kotlin 让我感到最大惊喜的地方。...在 Kotlin 中方法参数是一个值,所以你不能改变 num 参数。这是好的语言设计,因为你不应该改变方法的参数。但是你可以用相同的名称定义另一个变量,并按照你想要的方式初始化。...我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?”...“它是与类绑定的一个单例对象。你可以把日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样吗?”...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”
使用它又什么风险? 公共静态不可变(public static final )变量也就是我们所说的编译期常量,这里的 public 可选的。...(答案) 重载和重写都允许你用相同的名称来实现不同的功能,但是重载是编译时活动,而重写是运行时活动。你可以在同一个类中重载方法,但是只能在子类中重写方法。重写必须要有继承。...120)Java 中,嵌套公共静态类与顶级类有什么不同?(答案) 类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公共类,并且顶级公共类的名称与源文件名称必须一致。...(答案) 一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求。...一个嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如 HashMap.Entry 是一个嵌套静态类,HashMap 是一个顶级类,Entry是一个嵌套静态类。
修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。 this 指针 this 指针是一个隐含于每一个非静态成员函数中的特殊指针。...内联函数在运行时可调试,而宏定义不可以。 虚函数(virtual)可以是内联函数(inline)吗?...虚函数的类用于 “实作继承”,继承接口的同时也继承了父类的实现。 纯虚函数关注的是接口的统一性,实现由子类完成。...带纯虚函数的类叫抽象类,这种类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。抽象类被继承后,子类可以继续是抽象类,也可以是普通类。 虚基类是虚继承中的基类,具体见下文虚继承。...这样就找到了虚基类成员,而虚继承也不用像普通多继承那样维持着公共基类(虚基类)的两份同样的拷贝,节省了存储空间。
领取专属 10元无门槛券
手把手带您无忧上云