JAVAOPP笔记

1.对象和封装

创建建对象的方法

类名 对象名=new 类名();

列如:Penguin p=new Penguin();

通过对象名.属性名调用属性

p.name="qq";

通过对象名.方法名调用方法

p.print();

构造方法以及重载

public 类名 (){
}
列如Penguin的构造方法为
public Penguin(){
}

构造方法是一个特殊的方法当没有Penguin()方法时系统会自动提供一个空的构造方法

构造方法名和类名相同,没有返回值类型,构造方法主要是创造对象时执行一些初始化操作,比如给成员赋值

构造方法没有返回值类型,如果有则不是构造方法,而是和构造方法同名的成员方法。

重载

方法名相同,参数列表不同,被称之为构造方法的重载。

列如:

public Penguin(){
}
public penguin(String name){
 this.name=name;
}

satic修饰符

static可用用来修饰属性,方法,以及代码块。

static修饰的变量属于这个类虽有,即这个类创建的所有对象是共用同一个static变量

通常吧static修饰的属性和方法称为 类属性(类变量)和类方法即静态方法

静态方法中不能够使用this和super关键字

在使用常量时为了方便可以使用static来修饰

列如:static int min;

static final String SEX_MALE="男";

注意事项:在方法中不能能定义static变量,静态变量不能够是局部变量

封装

通过使用private,protected,public和默认权限的控制符来实现权限控制

可以通过将属性设为private权限来达到封装的效果,这样属性就只在类内可见,再使用提供public权限的set和get方法实现对属性的存取

列如:

private String name="小明";
 public String getName(){
 return name;
 }
 public String setName(String name){
 this.name=name;
}

2.继承

继承通过extends关键字来实现

列如 men继承People类

public class men extends People{
public men(String name){
 super(name);
}
}

super表示调用了父类People的有参构造方法,还可以通过super关键字直接调用父类的方法

列如:super.print();

Java中只支持单继承,即每个类只有一个直接父类。继承表达的是 is a的关系

列如 men is a People

在Java中所有类都直接或者间接的继承了java.lang.object类object类是所有Java类的祖先在定义一个类时如果没用使用extends关键字那么这个类则直接继承object类

列如

public class Myobject{
}

Myobject类的直接父类为object类

Java中子类会从父类中继承的东西

1.继承public和protected修饰的属性和方法,无论子类和父类是否再同一个包里

2.继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里

3.无法继承父类private修饰的属性和方法

4.无法继承父类的构造方法

子类重写父类的方法

列如men重写父类People

public class men extends People{
public men(){
}
public men(String name){
 super(name);
}
 重写父类的print()方法
public void print(){
}
}

子类重写父类必须满足以下条件

1.重写的方法和被重写方法必须具有相同的方法名

2.重写方法和被重写方法必须具有相同的参数列表

3.重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类

4.重写方法不能缩小被重写方法的访问权限

重写和重载的区别

重载涉及到同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型,访问修饰符无关

重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同(或者是其子类),访问修饰符不能严于父类

如何在子类中调用父类被重写的方法

可以通过super关键字来实现

super代表对当前对象的直接父类对象的默认引用

子类可以通过super来访问父类成员

注意事项:

1.super必须出现在子类(子类的方法和构造方法中)而不是其他位置

2、可以访问父类的成员,如父类的方法,属性,构造方法

3.注意访问权限的限制,无法通过super访问被private修饰的成员

1.super.name;

2.super.print();

3.super(name);

如果子类构造方法中没用通过super调用父类的有参构造方法也没有通过this调用自身的其他构造方法系统会默认调用父类的无参构造方法

如果使用super调用父类的有参构造方法则执行父类的有参构造而不是无参

注意事项

在一个构造方法中this和super语句只能位于第一行且不能同时使用

在实例方法中this和super方法不要求是第一行且可以同时出现

3.多态

例子:

父类名 对象名=new 子类名();
对象名.方法名();
Dog dog=new Dog(“大黄”,“雌”);//不涉及类型转换
Pet pet=new Dog(“大黄”,“雌”);//子类到父类的转换
pet.eat();//会调用Dog类的eat()方法而不是Pet类的eat()方法

注意:父类无法直接调用子类特有的方法

当父类需要调用子类特有方法时需要用到向下转型

列如

Dog d=(Dog) pet;//强制将类型转为Dog类
d.子类特有方法();