黑马程序员 面向对象学习二

 ----------android培训java培训、java学习型技术博客、期待与您交流!----------

3、关于多态多态是指“一种定义,多种实现”

 

 (1)、对于子类重定义父类的成员方法,我们有如下说法:如果参数列表相同(参数个数和参数类型相同),则称为覆盖(Override),否则称为称为重载(Overload),重载都是编译时多态。

(2)子类对象是父类对象:如果有Student extends Person,那么

newStudent() instanceof Person为true

newPerson() instanceof Person 为 false

(3)、父类对象引用子类实例:即父类与子类的赋值相容性,也就是父类能够引用子类实例,而反之就不行:

Personp = new Student();//赋值相容,子类对象是父类对象,父类引用子类实例,运行时多态

Students = new Person();//赋值不相容,父类对象不是子类对象


4、 关于继承:继承是类与类之间,或接口与接口之间的一种“传承”关系,顾名思义,既然是继承,那么继承类定然是具有被继承类的某些成员属性和成员方法。java中的使用关键字extends声明某个类继承指定的父类,格式:

[修饰符] classSonClass extends FatherClass。

java中 的类是单继承的,怎么说呢,如果一个类A继承了B,那么它就不能直接继承C,形象一点就是一个儿子不能有两个亲生父亲。这样我们自然会问,既然是单继承,一脉相承,那么最初的类是什么呢?在西方的神话中,上帝创造了万物,那么,java中也有这样的一个“上帝”,它就是Object类,它是类层次的根。Object类没有成员变量,提供了多个最常用的成员方法,这些成员方法具有“属性”的特征,换句话说,也就是每个派生类都有该方法。

继承的原则:(1)、子类继承父类的成员变量。(2)子类继承父类出构造方法以外的成员方法。(3)、子类可以增加成员,包括成员变量和成员方法,可以重定义从父类继承来的成员,但一旦继承,就不能删除。

关于第(2)点的说明,我们知道,一个类的对象实例的创建时通过构造方法来实现的,子类没有继承父类的构造方法,那么子类是怎样创建对象的呢?子类是通过调用父类的某个构造方法而得以创建本子类对象的,另外,子类可以用super调用父类的构造函数,而当一个子类没有声明自己的构造方法时,java会默认通过super调用其父类无参数的构造方法,从而子类得以创建对象。

一个简单的例子:

public class CheckConstructor {

	
	public static void main(String[] args) {
		
		new Student();//该句用于验证创建Student时调用了父类Person的构造函数
		
		System.out.println("----------------------");//华丽的分割线呐
		
		//以下这句演示在创建GoodStudent类的对象的时候通过super调用了其父类Student构造函数
		new GoodStudent("小明");
	}
}
class Person{
	Person(){
		System.out.println("This is Person");
	}
}

class Student extends Person{
	Student(){
		System.out.println("This is Student");
	}
	Student(String str){
		System.out.println("Hello "+str);
	}
}

class GoodStudent extends Student{
	GoodStudent(String str){
		super(str);//演示通过super调用父类Student的构造函数
	}
}
运行结果:
This is Person
This is Student
----------------------
This is Person
Hello 小明

5. 成员变量 VS 局部变量. 

  • 成员变量定义在类中, 在整个类中都可以被访问. 成员变量随着对象的建立而建立, 存在于对象所在的堆内存中.* 成员变量有默认初初始化值. 
  • 局部变量只定义在局部范围内(函数内、语句内等). 局部变量存在于栈内存中, 作用范围结束后, 变量空间自动释放.* 局部变量没有默认初始化值. 

6. 构造代码块. 写在独立{}中的代码. 
  • 作用: 给对象进行初始化. 
  • * 对象一旦建立就执行, 优先于构造函数执行. 
  • 和构造函数的区别: 构造代码块是给所有对象进行统一初始化, 而构造函数是给对应的对象初始化. 


7.* this关键字.

  • 特点: this代表其所在函数所属对象的引用. 换言之, this代表类对象的引用. 
  • 使用情景: 当函数内需要用到调用该函数的对象时, 就用this. 
  • 静态方法中不能写this、super关键字. 


总结:面向对象的内容实在太多,这些也只是冰山一角而已。



----------android培训java培训、java学习型技术博客、期待与您交流!----------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值