面向对象
生成对象的方法
格式:类名 对象名 = new 类名();
例如 Dog dog = new Dog();右边部分Dog()又称为构造函数
1.Dog d = new Dog();
创建一个Dog的引用
2.Dog d = new Dog();
创建一个Dog的对象
3.Dog d = new Dog();
将创建的Dog对象赋给这个引用
this 使用方法
this 可以担当当前的引用
class Person{
String name;
int age;
String address;
Person(){
}
Person(String name, int age){
this.name = name;
this.age = age;
}
Person(String name, int age, String address){
/*
*this.name = name;
*this.age = age;
*this.address = address;
*/
//this();//无参数调用 Persom()
this(name, age);//调用的 Person(String name, int age)
this.address= address;//减少了代码的重复
}
void talk(String name){
System.out.println("my name is " + name);
}
}
this 可以调用成员变量和成员函数、也可以调用构造函数;
this 可以起到区分成员变量与参数,此时的this 不能省略。
Static 关键字的作用
静态成员变量是类层次的变量,既可通过类名调用,又可以通过对象名调用。
Java 当中只支持单继承
子类不能继承父类的构造函数,只能继承成员变量和成员函数;
在子类的构造当中,必须调用父类的构造函数
不写:编译器默认 会在子类中添加 super();
如果需要调用父类的构造函数 super(参数列表);
super 必须是第一条,否则会出错。
复写 Override -------------------------- | 区别于重载
1.在具有父子关系的两个类中; | 同一个类函数中
2.父类和子类各有一个函数,其定义完全相同; | 参数列表不同
(返回值、函数名和参数列表)都相同 |
注意:如果有重复 可以通过调用 super.XXX(); |
调用父类的函数。 |
向上转型
class Person{
String name;
int age;
void eat(){
System.out.println("吃饭!!");
}
void talk(){
System.out.println("My name is " + name + "My age is " + age);
}
}
class Student extends Person{
String address;
void study(){
System.out.println("I am Studing!");
}
void talk(){
super.talk();
System.out.println("My home is " + address);
}
}
class Test{
public static void main(String args[]){
Student s = new Student();
Person p = s;
p.name = "zhangsan";
p.age = 20;
//p.address = "Beijing"; 此处会报错
p.talk();
//p.study(); 此处会报错
}
}
一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型;
其调用的方法,取决于这个引用所指向的对象
Student s = new Student();Person p = s;
向下转型前提:先将一个对象向上转型,在将对象向上转回来。不能直接向上转!!
Person p = new Student();
Student s = (Student)p;
错误的向下转型
Person p = new Person();
Student s = (Student)p;
抽象类(基类)
使用abstract定义的类被称之为抽象类;1.抽象类不能够生成对象<=>不能实例化;
2.如果一个类当中包含有抽象函数。那个这个类必须被声明为抽象类;
3.如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类。
1.抽象类不能生成对象
2.构造函数用于生成类的对象
注意:抽象类可以有构造函数
抽象函数是没有函数体的,abstract void eat();
抽象函数是可以被继承的,但是如果不想将子类变为抽象类,则需要将抽象类的抽象方法复写