概述
IDEA中快捷生成getter/setter的快捷键为 alt+inser(enter)
getter/setter命名规范:都是以gte/set单词开头+要操作的属性名称
一、访问修饰符
Java中有四个关于权限的关键字,权限从小到大为:
1.1.private(当前类内部可见)<default(不需要写这个单词,默认访问权限)包(文件夹)访问权限,当前包的内部可见(子包都不可见!!!!)<protected(继承访问权限),在不同包的父子类之间可见<public(公共访问权限),只要是public权限,随意使用,完全公开
包访问权限,同一个包中,当且仅当当前这个包中同级的所有类之间可见,其他包(包括子包)都不可见。
2.1protected修饰符(可以简单理解为protected权限比包权限多了个包外父子类的权限,就不再同一个包下的时候,protected权限也只有继承是可见)
继承修饰符,不同包(和父类不同包)的父子类可见
例1:protected的访问权限包括同包中的父子类吗?
不同文件夹的父子类之间使用protected都是可见的,更何况还是同一个包,这就更加可见了!!同一个包中,使用包权限都可见,更何况比它还大的protected!
例2:同包中不同类之间(没有继承关系)的protected是否可见?
一定可见===》包权限可见的权限和方法,protected一定具备。
例3:public能否修饰外部类?
不能,假设public class Text()=>Text类定义完之后,就消失不见了,Text的外部完全都不知道他的存在!矛盾!
包的命名规范:包的命名采用全小写,多个单词之间使用_分隔。
二、包权限
可以在不同的包中创建同名的类!==>类似在操作系统的同一个文件夹内不能创建多个同名同类型的文件,但是在不同的文件夹中,可以创建多个同名称同类型的文件。
因此在Java中类的全名称为 包名.类名来唯一的确定一个类。
三、包的导入
1.1、可以使用import关键字来告知编译器入包(inport关键字表示在Java中导入某个包中具体的类,无法直接导入一个文件夹)。
1.2、假设一个包中有多个其他类,我们可以使用通配符*来表示导入(import java.util.*;),此时util中的所有类都可以使用了,具体导入哪个就导入哪个。
1.3使用通配符也有个问题,就是当同一个类中使用多个不同包的同名类,就会产生冲突。(这时时还是显示导入某个具体类即可,不要使用通配符。即包名.类名)
1.4静态导入:要使用静态导入类下的所有静态方法就只需要调用方法名称即可,就好像这些方法是自己定义的一样。
四、JDK中常见的包
1.java.lang:系统常用的基础类:String,Object(万物之母),Math,这个包在JDK1.1之后自动导入。
2.java.lang.reflect:反射开发包,反射式是所有框架的基础。
3.java.util:java提供的工具开发包(所有集合ArrayList,Linkedlist,HashMap等都在这个包中)。
4.java.sql:java数据库开发相关的包。
5.java.io:io开发包(文件的操作)。
6.java.net:网络编程开发包 Socket。
五、继承
1.1将若干个不同的类之间相同的属性和方法抽象为一个共同的父类,子类只需要扩展自己类中独有的属性和方法即可,把当前这种编程属性,称之为“继承”。(代码的复用,方便进行子类的功能扩展,子类只需要实现自己额外的属性和功能即可,共有的特性以及行为放在父类中)
1.2要想使用“继承”,能发生继承的类之间必须满足is a原则!!!!!(例:dog is a aminal;cat is a aminal)
1.3在JAVA中使用extends表示继承一个父类,父类中的所有属性和方法都会被子类继承下来,子类只需要关心实现自己独有的属性和行为即可,大大减少了重复的代码,扩展新的子类就更加容易。
2、继承的使用规则:
2.1 在JAVA中,类的继承是单继承,一个类只能使用extends关键字继承一个父类!
2.2 Java中不允许多重继承,但是允许多层继承。一般多层继承最多不超过3层关系。
3.显示继承和隐式继承
3.1 隐示继承(父类中的某些方法和属性,子类继承下来了,但是无法直接使用)和显示继承(父类中的某些方法和属性,子类继承下来了,随意使用)
4、访问父类的属性
4.1 访问父类的属性:子类想要直接访问父类的属性,父类中的属性权限必须>=protected
若显示继承,使用父类的属性,可以直接使用(子类中没有和父类同名称的属性),若子类也定义了父类相同名称的属性,则遵从就近原则(先在方法中寻找->再到当前类的内部(即子类中)->最后向上去父类中寻找同名变量。)
例:若父类和子类变量名称相同,但是类型不同,那访问谁?
只要在子类中定义了和父类名称相同的属性,无关类型使用相同名称时,调用的都是子类中覆盖后的变量!
5、 super关键字
5.1 如果想要在子类中调用被覆盖的父类中同名属性,super修饰属性,明确表示从父类中寻找同名属性。
5.2 super.方法名称表示从父类中寻找方法属性。
5.3super调用父类中的构造方法
a、若调用的是父类的无参构造,则可以不用写。
b、若调用的时父类的有参构造,则必须显示使用super(参数列表),明确表示先调用父类的构造方法。
使用super关键字调用方法注意事项:1、在子类中调用父类的构造方法必须放在子类构造方法的首行。2、this(this的构造方法调用也得放在在首行)和super表示构造方法调用时,不能同时出现
5.4super和this关键字的不同与相同点
this可以表示当前对象的引用,但是super没有这个特点,只能引用父类的属性和方法,super在引用父类的构造方法时必须放在首行;this和super都表示成员域的属性,这俩关键字都不能在静态域中直接使用
6、 子类中调用父类的方法(重点)
6.1 方法重写(override)发生在有继承关系的类之间,子类定义了和父类除了权限不同以外其他全部完全相同(名称,参数列表,返回值都相同)的方法,称之为重写。
6.2 子类重写后的方法权限>=父类的权限
6.3 在子类中调用被重写后的父类方法,使用super.方法名称()表示直接从父类中寻找同名方法。
7、关于父子类对象的产生
7.1 当调用子类构造方法产生子类对象时,JVM会首先调用父类的构造方法先产生父类对象而后在产生子类对象。
六、多态(依赖于继承与方法重写实现)
多态:同样的方法,在使用不同的对象调用时,表示出不同的行为称之为“多态”。
多态同样的一个方法的多种状态(在JAVA中多态依赖于继承+方法重写来实现多态性)。
1 final关键字
1.1、final修饰的属性-->a、final修饰基本数据类型,数值在定义后无法修改。(final int a=10-->a就是一个常量,定义后无法修改,只能保存10);b、final修饰引用数据类型,值不能修改,这个值指的是引用保存的地址不能修改!地址中的内容还是可以修改的。
1.2、final修饰方法-->被final修饰的方法不能被重写!(不允许子类覆盖).
1.3被final修饰的类不能被继承,final修饰的类没有子类。
2.1、在类中定义常量时,一般搭配static(定义在方法区,共同使用,避免空间的浪费)一起使用(不强制,一般来说定义类中的常量,都是静态全局常量)
3.1、常量的命名规则:
常量使用全大写命名,多个单词使用_分隔,常量必须在定义时赋值(不存在默认值)。
final AGE=10;
final String STUDENT_NAME=“小明”;
七、向上转型
对象的向上转型其实有点类似于基本数据类型的小类型提升为大类型,自动提升。
向上转型,new子类实例,子类实例的天然就是父类的包含的范围之内,满足天然的is a原则。
向上转型的优点:
1、参数统一化,方便进行子类的扩展。(假设现在要实现一个方法,接受所有Aminal以及其子类的对象,没有向上转型,只能当前类型的引用指向当前类型,若现在Aminal有成百上千个。这个方法就的重载成百上千次,但有了向上转型,参数统一化,只需要在方法形参规定父类的引用,所有子类对象都能够使用父类引用来接受。)
2、向上转型可以方便进行子类的扩展。
1.1、对象向上转型发生在以下三个位置:
1.1直接赋值
父类名称 父类引用=new 子类实例();
父类引用.方法名称()=>若这个方法被new出来的子类重写,则调用的一定是重写后方法。
Aminal animal=new Dog();
1.2方法传参
1.3方法的返回值
八、向下转型
1.1.方法的重载:重载发生在同一个类中,方法名称相同,参数列表不同,与返回值无关。
2.1.方法重写override:发生在有继承关系的类之间,子类定义了和父类除了权限不同(子类权限>=父类权限),返回值可以为向上转型类的返回值之外,参数列表,方法名称完全相同的方法,就称之为方法重写(是对非privat修饰,非final修饰,非构造方法等的实现过程进行重写缩写)。
例1.:父类是private权限,子类是public权限,能否重写?
不能!!私有方法无法被重写(同时当一个方法被final(属性:final修饰的属性不能改;final修饰的方法不能重写;final修饰的类不能有子类)修饰,说明该方法也不能被重写)。
例2.static修饰的静态方法能否被子类重写???
不能!!因为静态方法是归属与某个类,与对象无关,因此静态方法不存在方法重写。
例3.构造方法能否被子类重写?
不能!!名字不同;构造方法是为了产生对象,无法在子类中修改父类对象如何产生的。
关于方法重写的返回值,必须相同(除了向上转型类的返回值之外,其他返回值,只要不相同都不能覆写)
3.1.父类名称 父类引用=new 子类实例();
3.2.通过父类引用.操作的属性和方法,要看父类中是否有这些属性和方法;若存在,判断当前调用的这个方法是否被子类重写,若重写,则调用的时子类重写后的方法。
3.3.可以使用注解@Override检查是否覆写成功。 ·
4.1.向下转型的两点说明:
1、要想发生向下转型,必须首先先进行向上转型。
2、类型转换有风险,不能将毫无关系的两个类之间进行强转。
可以使用关键字instanceof来协助进行向下转型,只要能进行向下转型的引用,instanceof关键字才会返回true。
最后
以上就是光亮皮卡丘为你收集整理的访问修饰符、常见的包以及包的权限和包的导入(inport关键字)、继承(super关键字)、多态(向上和向下转型)的全部内容,希望文章能够帮你解决访问修饰符、常见的包以及包的权限和包的导入(inport关键字)、继承(super关键字)、多态(向上和向下转型)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复