Java复习之路(第七天 面向对象)( this关键字继承 )

Java基础

面向对象:

定义:构造方法是一种特殊的方法,它的方法名与类同名。对象的创建就是通过构造方法来完成,他的主要的功能就是完成独享的重建或者是对象的初始化,当类实例化一个对象时就会自动的调用构造的方法,构造的方法和其他的方法一样可以重载

形式:方法名和类名完全一致

可以有参数,也可以没有参数

修饰符 类名([参数]){

    代码。。。

class Person{
		//构造方法
		public void Person() {
			
	} 
}

创建并且调用构造方法,并实现构造方法的重载

package com.tedu.constructor;
//构造构造方法创建对象
public class Test1_Constructor {
	public static void main(String[] args) {
		 //测试Person对象
		//在执行new Person()方法是自动的进行调用构造方法
		
		//在调用方法的时候可以做到自动的进行匹配相应的参数的函数
		Person person=new Person();
		Person person2=new Person(2);
		Person person3=new Person("txs");
	}
}

//创建人类
class Person{
		//构造方法,方法名称和类名完全一样,修饰符号,方法名([参数])
		//作用1;用来创建对象,作用2.初始化对象
		public  Person() {
		System.out.println(1);
	} 
		//重载构造方法
		public  Person(int a) {
			System.out.println(a+15);
		} 
		
		public  Person(String name) {
			System.out.println(name);
		} 
}

方法总结:

1.方法名和类名一致

2.常用于创建对象,初始化对象

3.在new Person()的时候,会自动调用无参构造函数

4.当提供一个含参数构造是,无参构造会被覆盖,如果还想要new Person()这样创建对象,需要手动的吧无参数的构造方法写出来比如Public Person(){ }

5.一般情况下,都会手动的进行提供无参数构造

 

构造方法的赋值

package com.tedu.constructor;
//构造方法的赋值
public class Test2_Constructor2 {
	public static void main(String[] args) {
		Student student=new Student("柳市", 12);
		System.out.println(student.age);
		System.out.println(student.name);
	}	
}

//创建一个学生类
class Student{
	String name ;
	int age;
	//赋值方式一:利用set方法
	//赋值方式二:利用构造函数
	public Student() {}//方便new Student()创建对象
	public  Student(String n,int a) {
		name=n;
		age=a;	
	}
}

运行的过程:

this

定义:this代表本类对象的一个引用的对象

形式:

name=name

age=age

public  Teacher(int no,String name) {
		name=name;     //结果是null
		no=no;         //结果是0
	}
//总结:违背了程序的就近的原则


更改以后得代码:
	public  Teacher(int no,String name) {
		this.name=name;
		this.no=no;
	}

知识总结:当局部变量的名称和成员的变量名称相同时,可以通过this的关键字进行调用成员的变量,进而给成员变量进行赋值,否则,根据变量的就近的原则,会一直使用局部的变量

知识点有参构造和无参构造可以通过this这个关键字进行相互调用但是不可以同时调用

有参数进行调用无参数

public  Car(String name) {
        //通过this调用含参构造
        this();
        //this.name代表的是成员的变量,右面的name代表的是局部变量 
        this.name=name;
    }

无参数进行调用有参数

    public  Car() {
        //这里面this函数调用的是下面的有参数的函数
        //通过this调用含参构造
        this("BWM");
        System.out.println(1);
    }

package com.tedu.constructor;
//测试this在构造方法里面的调用
public class Test4_this2 {
	public static void main(String[] args) {
		Car car2=new Car();
		System.out.println(car2.name);
		Car car=new Car("宝马");
		System.out.println(car.name);
	}
}

//创建汽车类
class  Car{
	String name;
	public  Car() {
		//这里面this函数调用的是下面的有参数的函数
		//通过this调用含参构造
		this("BWM");
		System.out.println(1);
	}
	public  Car(String name) {
		//通过this调用含参构造
		this();
		//this.name代表的是成员的变量,右面的name代表的是局部变量 
		this.name=name;
	}
	
}

方法的过程:

this._本类对象的成员,包括成员变量和成员的方法,this必须要放在方法第一条语句出现(在第二类)

 

构造代码块和局部代码块

构造代码块

1.在类的内部,方法外部的代码块

2.通常用于抽取构造方法是中的共性的代码

3.每次调用构造方法前都会调用构造代码块

4.优先于构造方法加载,每次创建对象的时候都会进行创建

package com.tedu.block;
//测试代码块(构造代码块(构造函数)/局部代码块)
public class Test5_Block {
	public static void main(String[] args) {
		//创建Animal对象
		//1.如果有构造的方法代码块,优先执行鼓噪代码块后执行构造的方法
		Animal animal=new Animal();
		Animal anima2=new Animal();
		//Animal animal1=new Animal("猴子",3);
		//System.out.println(animal1.age);
		//System.out.println(animal1.name);
	}
}
class Animal{
	/*
	 * 构造代码块
	 */
	{
		System.out.println(1);
	}
	//无参数构造方法
	String name;
	int age;
	public  Animal(){
		System.out.println(2);
	}
	//无参数构造方法
	public  Animal(String name,int age){
		this.age=age;
		this.name=name;
	}
	
}

局部代码块

1.在方法里面的代码块

2.通常用于控制变量的作用的范围,出了括号就会失效

3.b变量的范围越小越好,成员变量会有线程安全的问题

4.他们的执行的顺序并没有固定的顺序的说明

构造的方法,在执行的构造的方法前会把所有的构造代码块执行完

package com.tedu.constructor;
//测试局部的代码块
public class Test6_Block2 {
	public static void main(String[] args) {
		Zoo zoo=new Zoo();
		zoo.show();
	}
}

class Zoo{
        //构造的方法,在执行的构造的方法前会把所有的构造代码块执行完
        public Zoo(){
            System.out.println("0")
        }
	//构造代码块
	{
		System.out.println("3");
	}
	public void show() {
		//局部的代码块
		{
			System.out.println(1);
		}
		System.out.println(2);
	}
		//构造代码块
		{
			System.out.println("4");
		}
}

他们的执行的顺序与他们的方法所在的位置无关,取决于他们的方法的优先级别

继承:

定义:

继承是面向对象最显著的一个特性,继承是从已有的类中派生出了新的类,新的类能吸收已有的数据属性和行为,并扩展新的能力。Java继承是使用已存在类的定义作为基础建立新类技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但是不能选择性的继承父类(超类,基类),这种技术使得复用以前的代码非常容易,能够大大的进行缩短开发周期,降低开发的费用

继承的特点:

1.使用extends关键字

2.相当于子类把父类的功能进行复制一份

3.Java仅仅支持单继承

4.继承具有传递的关系(爷爷,儿子,孙子)

5.不可以继承父类的私有的成员

6.继承多用功能的修改,子类尽心拥有父类的功能的同时进行功能的拓展

7.像是is a 的关系

入门的案例:

package com.tedu.extend;
//测试继承的关系
public class Test7_Extends {
	public static void main(String[] args) {
		//创建的子类的对象
		Son son=new Son();
		//进行调用父类的方法属性
		son.language="英语";
		son.skin="黄";
		//将方法的值进行调用
		System.out.println(son.language);
		System.out.println(son.skin);
		son.eat();
	}
}
//创建父类
class Fu{
	String  skin;
	String language;
	public void eat() {
		System.out.println("吃饭");
	}
}
class Son extends Fu{
    //继承的含义就相当于子类将父类的内容进行复制了一下
}
class Sun extends Son{
    //继承的含义就相当于孙子将爸爸的内容进行复制了一下
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值