1,private关键字的特点
1)被private修饰的变量、方法,只能在本类中访问,外界类不能直接访问;
2)private修饰的成员变量以及成员方法,不能直接访问,但是可以通过公共的访问间接访问
3)private权限修饰符的范围最小,只能在本类访问
调用方法如下
public class Test6 { private int num=10; private void method() { System.out.println("method Demo"); } public void show() { System.out.println(num); method(); } } class Demo{ public static void main(String[] args) { Test6 t=new Test6(); t.show(); } }
2,什么是封装?
一个类中的成员变量(描述事物的属性)需要对外的隐藏,被private修饰,为了保证数据的安全性
对外需要提供公共的访问方式setXXX赋值和getXXX获取值;
3,冒泡排序的思想以及和兴代码体现
冒泡排序的思想:
两两比较,较大的往后放,最大值出现在最大的索引处;依次比较,可以得出排好序的数组
4,面向对象的思想特点?
1)解决实际问题上,更符合现实生活的思想行为习惯
2)让复杂的事情简单化
3)我们从执行者,变成指挥者
5 局部变量和成员变量的区别?
1,存储位置不一样,局部变量存储在栈内存中,成员变量存储在堆内存中
2,生命周期不同,局部变量随着方法的调用而存在,随着方法的调用完毕而消失,成员变量随着对象的创建而存在,随着对象的消失而消失
3,初始化不同,局部变量没有初始化值,在调用前必须赋值,成员变量有初始化值
4,在类中的位置不同,局部变量在方法中,成员变量在类中方法外
6 this和super的区别
使用方法
如果子类中出现非私有的同名变量,要引用时:
(1) 访问父类中的同名变量,用super
(2) 访问子类本类中的变量,用this
如果子类重写方法时,要引用父类中的已经定义好的功能时,用super.方法
如果子类中的构造函数需要指定父类中其他构造函数进行初始化,使用super(参数)的形式
如果子类中的构造函数中,需要引用父类中已经定义好的方法,使用super(参数)
主要区别
super的使用基本与this一致,主要区别在于
super代表父类对象的引用
this代表本类对象的引用
7 匿名对象的创建:
标准写法: 类名 对象名 =new 类名()
8 匿名对象的格式
new 类名(); 直接在堆内存中开辟空间,使用完毕后就要被回收,可以节省内存;
9 匿名对象好处:
匿名对象可以作为参数传递
匿名对象可以节省内存空间,因为压根没有栈内存空间,不需要开辟,直接开辟堆内存空间
匿名对象一般适用于一次即可,使用完毕直接被GC回收
形式参数如果是一个类(引用类型),当调用该方法时,实际参数如何传递?
如果方法的形式参数是类,实际参数传递,需要传递当前类的具体类对象
public class Test7 { public static void main(String[] args) { StudentDemo sd =new StudentDemo(); Student s=new Student(); sd.method(s); } } class Student{ public void study(){ System.out.println("好好学习"); } } class StudentDemo{ public void method(Student s){ s.study(); } }
10 this关键字的概念以及目的
this代表当前类对象的地址值引用Student s=new Student();---->空间地址值的引用
this的出现,为了防止局部变量隐藏成员变量,
this的用法:this.变量名:变量名:访问本类的成员变量
this.方法名();访问奔雷的成员变量
this()访问本类的无参构造方法
this(XXX) 访问本类的有参构造方法
11 构造方法的特点以及注意事项
构造方法的特点:
1)方法名和类名相同,
2)没有具体的返回值类型
2)没有void关键字
构造方法的目的:为了给类成员初始化
12 Phone p=new Phone();无参构造方法
1)栈内存开辟空间
2)堆申请空间
3)进行系统默认初始化,为成员变量
构造方法的注意事项:
1)当书写一个标准类的时候,没有给出任何构造方法,系统会默认提供无参构造方法
2)如果提供了一个类有的有参构造方法,系统就不会构造方法,所以,建议永远给出无参构造方法
3)构造方法是可以重载的
13 一个类成员的组成以及一个类的标准写法
一个类的组成
1)成员变量
2)构造方法
3)成员方法
一个类的标准的写法
1)成员变量私有化
2)午餐永远给出,有参构造根据题意要求
3)成员方法,根据题意要求(没有明确是否带参,是否有返回值,直接输出语句)
14 静态代码块,构造代码块,构造方法的优先级
每次执行构造方法之前,如果存在构造代码块,先执行构造代码块
静态代码块,随着类的加载而加载,类加载一次,静态代码块执行一次!
静态代码块 > 构造代码块 > 构造方法 static关键字的特点每次执行构造方法之前,如果存在构造
码块,先执行构造代码块 静态代码块,随着类的加载而加载,类加载一次,静态代码块执行一次!
静态代码块 > 构造代码块 > 构造方法
静态只能访问静态
15 什么是继承,继承的好处
将多个类的共性内容,抽取到一个独立的类中,让这多个类和这个独立的类产生一种关系,这就是"继承关系"
继承的好处:
提高代码的复用性
提高代码的维护性
类和类的关系,是多态的前提条件
类和类之间只支持单继承,但是可以多层继承
子类继承父类,构造方法如何访问
构造方法是不能继承的,子类通过super()默认父类的无参构造方法
子类继承父类,子类所有的构造方法默认父类访问父类的无参构造方法:
实际开发中:
子类的无参构造方法默认父类的无参
子类的有参构造方法 直接访问父类的有参构造方法
子类继承父类,如果出现了和父类一模一样的方法,子类的方法会将父类的方法覆盖了,方法重写
16 方法重写和方法重载的区别
方法重写override:出现在继承中,描述的子类继承父类的时候,可能沿用父类的功能,而且使用自己的功能将父类的功能进行覆盖;为了防止子类具体体现出来的功能信息
方法重载ocerload:定义方法的时候,方法名相同,参数列表不同,与返回值无关,目的是保证这个方法他的扩展性问题,同一个方法,可以不同类的参数
17 继承关系中成员变量的访问问题
子类继承父类,如果子类的成员变量名称和父类的成员变量名称一致,分别访问即可;
18, 如果子类的成员变量和父类的成员变量名称一致;
1)现在子类的局部位置找,是否存在,存在就使用
2)如果子类的局部位置没有,在子类的成员变量中找,如果有,就使用
3)如果子类的成员变量没有,然后在父类的成员位置找,若存在,就使用
4)如果父类的成员位置也没,(父类没有它的父类),就报错,整个类中没有变量;
总之,遵循"就近原则"
19 继承关系中成员方法的访问问题
子类继承父类,成员变量(公共方法)名称不一致,分别调用
如果成员方法名一样,系统认为子类需要重写父类的方法,必须保证,子类的方法和父类一模一样
----->子类将父类的方法覆盖,方法重新,访问子类的功能;
如果创建对象的时候,创建父类对象
Fu fu =new Fu();
fu.方法名();访问父类的成员方法
20 final关键字
fianl表示最终的,无法更改的,状态修饰符;
修饰类,该类不能被继承
修饰变量,此时变量是一个产量
修饰成员方法,该方法不能被重写
21 多态的前提条件以及成员访问特点
多态的前提条件:
1)必须有继承关系
2)存在方法重写
3)父类引用指向子类对象 Fu fu =new Zi();向上转型
22 多态的成员访问特点:
1)成员变量:编译看左,也行看左
2)成员方法:编译看左,运行看右,存在方法重写
3)静态的方法:算不上重写,跟类相关的,编译看左,运行看左;
4)构造方法:分层初始化,先执行父类初始化,再执行子类初始化
23 多态的弊端
不能访问子类的特有功能
多态的格式Fu fu=new Zi();
解决方案
1)创建具体的子类对象
Zi zi=new Zi();
此方法的弊端:需要重新开辟堆内存空间,消耗内存空间;
2)向下转型
Zi z=(Zi) fu;
z.特有功能();
不需要去单独开辟堆内存空间
24 多态的好处是什么
1)可以提高代码的复用性
2)可以提高代码的扩展性
如果在使用中出现ClassCaseException说明什么
这种方法代表的是"类转换异常"
使用多态操作向下转型的时候(使用不当),在堆内存中,信息和栈内存信息没有继承关系
Animal a=new Cat();(堆内存是猫,猫是动物)
Cat c=(Cat)a;(还原成猫,猫是猫)
Dog d=(Dog)a(语法没有问题,但是内存中有问题 猫是狗 )
25 什么是抽象类,抽象类的成员特点?抽象类如何实例化
有抽象方法(在具体的事物中才能具体的行为)的类一定是抽象类;
public abstract 返回值类型(参数类型 形参名称....);
抽象类的成员特点:
成员变量:可以是变量,也是自定义常量
成员方法:可以存在抽象方法,也可以存在非抽象方法
构造方法:可以存在无参/有参构造方法:分层初始化:先父类初始化,然后再子类初始化;
抽象类不能实例化:不能new对象
所以通过抽象类多态来实例化,通过具体的子类进行实例化
抽象类名 对象名 =new 具体的子类名();
26 什么是接口?接口和子实现类的关系是什么?书写格式
接口:体现的是一种额外的功能,设计李理念"like a"的关系
接口和子实现类的关系implements实现
27 abstract不能和哪些关键字使用
抽象类不能实例化,而且他是强制子类必须重新抽象方法:
abstract不能和static使用
static被类名访问,跟类有关,静态方法算不上方法重写;
不能和private使用
被private修饰的:只能在当前类访问
而abstracte修饰的方法需要被子类重写
不能和final使用
被final修饰的成员变量,不能被重写
abstract修饰的方法必须被子类重写:
接口的成员特点
成员变量
成员方法
构造ffa:jkou没有构造方法