Java面向对象三大特性

面向对象三大特性:

5.1继承(extends)--

1.生成子类的过程

2.Super调用构造函数

class People{

String name;

int age;

People(){

System.out.println("pleple hava no ");

}

People(String name,int age){

this.name=name;

this.age=age;

System.out.println("there have");

}

void eat(){

System.out.println("eat");

}

}

class Student extends People{

int grade;

//在子类的构造函数当中,必须调用父类的构造函数,因为子类继承了父类的变量、方法,需使用super调用父类

Student(){

super();//调用父类中的相对应构造函数,如果不写,编译器会自动添加

System.out.println("student have no");

}

Student(String name,int age,int grade){

super(name,age);

this.grade=grade;

}

}

class TestS{

public static void main(String args[]){

Student student=new Student("zhangsan",10,3);

}

}

注意:super调用父类的构造函数时,必须放在第一位。

5.1.2 复写(override

class People{

String name;

int age;

void introduce(){

System.out.println("my name is :"+name+",my age is:"+age);

}

}

//复写(override)也被称为覆盖或者重写

//1.在具有父子关系的两个类中

//2.父类和子类当中各有一个函数,这两个函数的定义(返回值类型、函数名、参数值)相同

class Student extends People{

String address;

void introduce(){

super.introduce();

System.out.println("my home in"+address);

}

}

5.1.3对象转型

1.对象的向上转型

 

//一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型

//一个引用调用的方法取决于引用所指向的对象

class TestS{

public static void main(String args[]){

Student s=new Student();

Person p=s;//向上转型

或者使用这种方式:Person p=new Student();

p.name="zhangsan";

p.age=20;

}

}

2.对象向下转型

 

或者Person p=new Student();

Student s=(Student)p;

3.抽象类(用作父类、基类)与抽象函数:

 

 

abstract class PersonA{//一个类中有抽象函数,那么类也必须定义为抽象类

String name;

int age;

void introduce() {

System.out.println("my name is "+name+",age is:"+age);

}

abstract void eat();//抽象函数

}

class TestPa{

public static void main(String args[]){

PersonA p=new Chinese();//向上转型为PersonA父类

p.eat();//调用方法,此时这个方法不是抽象函数

}

}

class Chinese extends PersonA{

void eat(){

System.out.println("use it");//通过override对抽象函数复写,使得子类可以生成对象

}

}

问题:抽象类可以有构造函数吗?

可以有,因为子类会自动调用super();

abstract class PersonA{

PersonA(){

System.out.println("PersonA fun");//构造函数

}

String name;

int age;

void introduce() {

System.out.println("my name is "+name+",age is:"+age);

}

abstract void eat();

}

class Chinese extends PersonA{

Chinese(){//构造函数

super();//默认调用

System.out.println("chinese fun");

}

void eat(){

System.out.println("use it");

}

}

抽象函数默认为public

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章