栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象(二)

三大特征

封装性(encapsulation)
①将属性进行私有化(private),通过公共方法(public)进行赋值和读取 ②不对外暴露的私有方法 ③单例模式 ......

 继承性(extends)

好处
>减少了代码的冗余,提高了代码的复用性 >便于功能的扩展 >为多态性的使用,提供前提

格式
   >class A extends B{}       | A:子类,派生类,subclass       | B:父类,超类,基类,super class    >一旦子类A继承父类B以后,A就获取了B中声明的所有的结构:属性,方法    >子类在继承以后,还可以声明自己特有的属性和方法:实现功能的扩展    >extends :延展 、 扩展

规定
    >一个父类可以被多个子类继承:Java中的多层继承性     >一个子类只能有一个父类:Java中的单继承性     >子父类是相对概念的     >子类直接继承的父类,称为直接父类。间接继承的父类,称为间接父类     >子类继承父类以后,就获取了直接父类及所有间接父类中声明的属性和方法

Object类
    >如果我们没有显示的声明一个类的父类的话,则此类继承于java.lang.Object类     >所有的Java类(除了java.lang.Object类)都直接或间接的继承于java.lang.Object类     >意味着,所有的java类具有java.lang.Object 类声明的功能。 方法:equals()/toString()/getClass()/hashCode()/clone()/         finalize()/wait()/notify()/notifyAll()

多态性( polymorphism)
理解:一个事物的多种形态 对象的多态性:父类的引用指向子类的对象         | Person p = new Man(); 多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法----虚拟方法调用         | 在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法         | 总结:多态是运行时行为            编译:看左边 ---父类           运行:看右边---子类         | 多态性只适用于方法,不适用于属性(编译和运行都看左边---父类) 使用前提     >类的继承关系     >方法的重写 
常用关键字 this
>用来修饰属性、方法、构造器 >将this理解成当前对象 >使用"this.属性"和"this.方法"来调用当前对象的属性和方法 >在类的构造器中,可以使用"this(形参列表)",来调用本类中指定的其他构造器 >不能通过"this(形参列表)"来调用自己 >规定:"this(形参列表)"必须声明在当前构造器的首行 >在构造器内部,最多只能有一个"this(形参列表)" >在类中,有n个构造器时,此时最多调用n-1个“this(形参列表)”
super:父类的
可以用来调用属性、方法、构造器 使用       >可以在子类的方法或构造器当中,使用“super.属性”或“super.方法”的方式,显示的调用父类中声明的属性和方法             | 例如在子类中声明了与父类同名的属性时,使用“super.属性”来显示调用父类中声明的属性             | 在子类中有重写的方法的情况时,想调用父类中被重写的方法,使用“super.方法”来显示调用父类中被重写的方法 在类的构造器当中,可以使用“super(形参列表)”来调用父类中对应的构造器 规定:     >"super(形参列表)"必须声明在当前构造器的首行     >我们在类的构造器中,“this(形参列表)”和“super(形参列表)”只能二选一     >在构造器中的首行没有显示调用“this(形参列表)”或“super(形参列表)”时,系统会默认有一个“super()”     >在类的多个构造器中,至少有一个构造器中使用了“super(形参列表)”,来调用父类中的构造器
static:静态的
static可以用来修饰:属性、方法、代码块、内部类 使用static修饰属性:静态变量(或类变量)     >属性,按是否使用static修饰,又分为:静态属性 vs 非静态属性(实例变量)     >实例变量:我们创建了类 的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值的被修改     >静态属性:我们创建了类的多个对象,多个对象 共享同一个静态属性。当通过某一个对象修改静态属性时,会导致其他对象调用此静态属性时,是修改过的。
static修饰属性的其他说明      >静态变量随着类的加载而加载。可以通过“类.静态变量”的方式进行调用      >静态变量的加载要早于对象的创建。      >由于类只会加载一次,则静态变量在内存中也只会 存在一份:存在方法区的静态域中。                 >静态变量(类变量)能够被 类和对象 调用;  实例变量能只能被  对象 调用
使用static修饰方法:      >随着类的加载而加载,可以通过“类.静态方法”来进行调用      >静态方法能被 类和对象 调用; 非静态方法只能被对象调用      > 静态方法中,只能 调用静态方法或属性; 非静态方法中,既可以调用非静态的方法和属性,也可以调用静态的方法和属性 注意点:     >静态方法中,不能使用this关键字、super关键字     >关于静态属性和静态方法的使用,从生命周期的角度去理解 在以下情况中使用static修饰属性或方法     >属性是可以被多个对象所共享的,不会随着对象的不同而不同     >操作静态属性的方法,通常设置为static的     >工具类中的方法,习惯上生命为static的。比如:Math、Arrays、Collections
final:最终的
final可以用来修饰的结构:类、方法、变量 修饰类:此类就不能被其他类继承 格式:权限修饰符 final 类名{}       例:public final String{} 修饰方法:此方法不能被重写 格式:权限修饰符 final 返回值类型 方法名(){}  例:public final void fun(){} 修饰变量:此时“变量”就称为是一个常量     >修饰属性:可以考虑赋值的位置有:显示初始化、非静态代码块中、构造器中     >修饰局部变量:尤其在final修饰形参时,表明形参是一个常量,当我们调用此方法时,给常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用形参,但不能进行重新赋值。 static final 用来修饰:属性(全局属性)、方法;
abstract   抽象的
可以用来修饰类、方法 修饰类(抽象类)       >格式:缺省/public abstract class 类名{}       >抽象类不能实例化       >抽象类中一定有构造器,便于子类实例化时调用       >开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作 修饰方法(抽象方法)       >格式:public/protected/缺省 abstract 访问修饰符 方法名(形参列表);       >抽象方法只有方法的声明,没有方法体       >包含抽象方法的类一定是抽象类,反之,抽象类中不一定有抽象方法。       >子类只有重写了父类中(抽象类)所有的抽象方法,才可以实例化       > 若是子类没有重写父类中的所有抽象方法,则子类也是抽象类,需要用abstract修饰 注意点       >abstract不能修饰属性、构造器等结构       >abstract不能修饰私有(private)方法、静态(static)方法、final修饰的方法、final修饰的类
interface(接口)
java中,接口和类是并列的两个结构 如何定义接口:定义接口中的成员             JDK7以前: 只能定义全局常量和抽象方法               | >全局常量:public static final定义的属性 但是书写时,可以省略不写             | >抽象方法:public abstract定义的方法  但是书写时,可以省略不写             JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法             | 静态方法:public static void method1(){   System.out.println("method1");}             | 默认方法:public default void method2(){  System.out.println("method2");}
接口中不能定义构造器,意味着接口不能实例化     Java开发中,接口通过让类去实现             >如果实现类覆盖了接口中所有的抽象方法,则次实现类就可以实例化             >如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为抽象类
Java类可以实现多个接口 --->弥补了Java单继承性的局限性             >格式:class AA extends BB implements CC,DD,EE{} 接口和接口之间可以继承,而且可以多继承 如何在子类(或实现类)的方法中调用父类、接口中被重写的方法     | 格式:调用父类:super.方法  调用接口:接口.super.方法     | 例如:super.method3(); //父类中的方法     | NewFeature.super.method3();//接口中的 默认方法     | NewFeature1.super.method3();//接口中的默认方法 接口中的静态方法只能通过接口调用 通过实现类的对象,可以调用接口中的默认方法     >如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法--->类优先原则     >如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么实现类在没有重写此方法的情况下,系统会报错。--->接口冲突               这就需要我们必须在实现类中重写此方法
package
>为了更好的实现项目中类的管理,提供包的概念 >使用package声明类或接口所属的包,声明在源文件的首行 >包,属于标识符,遵循标识符命名规则、规范(xxxyyyzzz小写)、“见名知意” >每 " . "一次,就代表一层文件目录 >同一个包下 ,不能命名同名的接口、类··········
import(导入)
>在源文件中显示的使用import结构导入指定包下的类、接口 >声明在包的声明和类的声明之间 >如果需要导入多个结构,则并列写出即可         可以使用"xxx.*"的方式,表示导入xxx包下的所有结构         | 例:可以使用"java.util..*"的方式,一次性导入util包下的所有类或接口 >如果使用的类或接口是java.lang包下定义的,则可以省略import结构 >如果使用的类或接口是本包定义的,则可以省略import结构 >如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示调用 >使用"xxx.*"方式表明可以调用xxx包下的所有结构,但是如果使用的是xxx子包下的结构,则仍需显示使用import关键字导入包 >import static组合使用:调用指定类或接口下的静态的属性或方法         | import static java.lang.System.*;表示可以使用System类下的静态的结构             | 例:可以使用"out.println("Hello World!");"
instanceof
>a instanceof A : 判断对象a是否为类A的实例。如果是,返回true, 如果不是,返回false >使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。     如果a instanceof A返回true,则a instanceof B 也返回true    | 其中类B是类A的父类

课程笔记

课程:尚硅谷宋红康老师的java入门课

END

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号