1、方法参数以及返回值问题研究
1、形式参数是基本类型要的是具体数值,是类名要的是子类的对象,是抽象名要的是抽象类的子类对象,是接口名要的是接口的实现类的子类对象。
- 基本类型
public class MyTest {
public static void main(String[] args) {
Student student = new Student();
setStudent(student,100);
student.show(new Student(),18);
System.out.println(student.num); //18
}
private static void setStudent(Student student,int num) {
student.num=num;
}
}
class Student{
int num=20;
public void show(Student student,int num){
this.num=num;
}
}
- 抽象类型
public class MyTest2 {
public static void main(String[] args) {
MyClasss aa = new AA();
setMyClss(aa, 200);
System.out.println(aa.num); //10
}
private static void setMyClss(MyClasss myClss, int num) {
myClss.show(num);
}
}
abstract class MyClasss {
int num = 10;
public abstract void show(int num);
}
class AA extends MyClasss {
int num = 20;
@Override
public void show(int num) {
this.num = num;
}
}
- 接口类型
public class MyTest3 {
public static void main(String[] args) {
MyInterface bb = new BB();
setInterface(bb,600);
System.out.println(bb.num);//100
System.out.println(MyInterface.num); //100
}
private static void setInterface(MyInterface myInterface,int num) {
myInterface.show(num);
}
}
interface MyInterface{
int num=100;
void show(int num);
}
class BB implements MyInterface{
int num=500;
@Override
public void show(int num) {
this.num=num;
}
}
2、返回值类型是基本类型返回的是具体值,是类名返回的是类的子类对象,是抽象类要的是该抽象类的子类对象,是接口要的是该接口的实现类的对象。
2、权限修饰符
四个权限修饰符的等级排列:
public>protected>默认的>private
-
修饰符:
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract -
修饰类的关键字:
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract -
修饰成员变量的关键字:
权限修饰符:private,默认的,protected,public
状态修饰符:static,final -
修饰构造方法的关键字:
权限修饰符:private,默认的,protected,public -
修饰成员方法的关键字:
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract -
除此以外的组合规则:
成员变量:public static final
成员方法:public static
public abstract
public final
3、内部类
概述:在类里面定义了一个类,这个类就被称作把内部类。
1.内部类可以直接访问外部里的成员,包括其私有的;但是外部类要想访问内部类必须要创建其对象。
2.访问成员内部类的格式:外部类名.内部类名 对象名=外部类对象.内部类对象;
3.成员内部类被静态修饰后的访问方式是格式:外部类名.内部类名 对象名=new 外部类对象.内部类对象;
4、匿名内部类
- 具备内部类的简化形式。
- 存在的前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。
- 本质:一个继承了该类或实现了该接口的子类匿名对象。
- 格式:
new 类名或者接口名(){
重写方法;
} ;
- 普通类的匿名内部类对象
public class MyTest {
public static void main(String[] args) {
VV vv= new VV(){
@Override
public void test() {
}
};
vv.test();
}
}
class VV {
public void test() {
}
}
- 抽象类的匿名内部类对象
public class MyTest2 {
public static void main(String[] args) {
set(new MyClass() {
@Override
public void show() {
System.out.println("aaaaaaaaaaaaaaaaaa");
}
});
MyClass my= new MyClass() {
@Override
public void show() {
System.out.println("aaaaaaaabbbbbbbbbbbbbbbbbbbaaaaaaaaaa");
}
};
set(my);
public static void set(MyClass myClass){
myClass.show();
}
public static void set2(WW ww) {
ww.hehe();
}
}
abstract class MyClass{
public abstract void show();
}
interface WW{
void hehe();
}
5、Object
- public boolean equals(Object obj)
指示相比较的两个对象是否相等 比的是地址。 - public final Class getClass()
返回此object的运行时类,可以通过class类中的一个方法,获取对象的真实类的全名称。 - public int hashCode()
返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。同一对象哈希码值一般相同。哈希码值是对象的逻辑地址值。 - public String toString()
返回该对象的字符串表示