this关键字
在面向对象中,this主要代表当前类的应用,也代表着当前类的对象。(可含当前对象在堆内存中的地址)
this.构造方法
代表当前对象应用引用类中的构造函数。
this.方法 当前引用调用类中相应的方法
代表当前类引用类中方法。
this.成员变量 对类的成员进行初始化
代表当前对象对类成员进行初始化。
this可以当返回值使用?返回结果相当于是本类的对象
返回当前的对象(本类new 出来得对象)
static关键字
被static关键字修饰的方法一般被称为静态方法 没有被static关键字修饰的方法 一般称为非静态方法。同理 被static关键字修饰的成员变量 叫静态的成员变量 ,没有被static修饰的叫非静态成员变量。
- 静态方法 只能访问静态的成员变量 如果访问非静态成员变量 那么无法通过编译,无需创建对象,使用类名就可以直接调用。
- 非静态方法 既能访问静态的成员变量,也能访问非静态的成员变量 只能通过创建对象的方式进行调用。
- 静态的成员变量和静态的方法 无需创建对象通过类名进行访问。
- 静态方法和静态成员变量 被整个程序共用 相当于共享。
静态区 用于存放static关键字所存储的内容
面向对象的基本特征---继承
继承 顾名思义 : 继承关系
父---子
父类: 被继承的类叫父类
子类: 去继承的类叫子类
类与类之间一旦出现了继承关系后,子类可以共享父类的成员变量和方法。(不能访问父类的私有成员变量和成员方法,若父类委定于私有化的成员变量和成员方法的话此问题忽略)。
使用extends 关键字来实现类与类的继承关系
public class Animal {
public String name;
public int legnum;
public void happy(){
System.out.println("叫");
}
}
public class Dog extends Animal{
.....
}
继承关系特点:Java语言的继承关系:是一种单继承的关系
- 一个子类只能有一个父类,而一个父类可以有多个子类
- 子类可以可以使用父类的属性和方法 ,但是父类不能够访问子类独有的属性和方法
- 创建子类对象时 先执行父类的构造方法 ,然后在执行子类的构造方法
- 使用super关键字 去调用父类的构造方法
- super父类的引用 超类的引用 基类的引用 用法和this关键字类似
重写
重写发生的前提是两个类存在继承关系。然后子类在重写父类的方法。父-子的关系 祖--孙的关系。
形式就是子类重写的方法和父类方法时除了和父类方法的函数体中内容不一样外,剩下的函数部分和父类一致。
(修饰权限,函数类型,返回值类型,函数名,参数列表)
instanceof 关键字
用于判断:对象是否属于后面的类型,如果属于则返回true 如果不属于则返回false
if (a instanceof Cat) {
System.out.println(true);
// 类型的转换
}else{
System.out.println(false);
}
引用数据类型转换
向上转型和向下转型:强制转换和自动转换
向上转型对应着:自动转换(子类转为父类)
向下转型对应着:强制转换(父类转为子类)
满足条件:两者之间要存在继承或者是实现关系(接口)
class duotai2{
public static void main(String [] args){
Dog d=new Dog();
Cat c=new Cat();
Pig p=new Pig();
feed(d);
feed(c);
feed(p);
}
public static void feed(Animal a){
//a.eat();
if(a instanceof Pig){//向下类型转换 instanceof 当前对象是否属于后面的类
Pig pp=(Pig) a;
pp.gbc();
}
}
}
class Animal{
void eat(){}
void speek(){}
}
class Dog extends Animal{
void eat(){
System.out.println("吃骨头....");
}
void speek(){
System.out.println("汪汪叫..");
}
void lookdoor(){
System.out.println("会看门...");
}
}
class Cat extends Animal{
void eat(){
System.out.println("吃猫粮....");
}
void speek(){
System.out.println("喵喵叫..");
}
void zhua(){
System.out.println("会抓老鼠...");
}
}
class Pig extends Animal{
void eat(){
System.out.println("吃饲料....");
}
void speek(){
System.out.println("哼哼叫..");
}
void gbc(){
System.out.println("拱白菜...");
}
}