栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Day10-面向对象(3)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day10-面向对象(3)

文章目录
  • 一、static(下)
  • 二、继承
  • 三、深入继承
  • 四、super
  • 五、重写
  • 六、访问修饰符


一、static(下)
  1. 修饰方法:类方法/静态方法,直接用类名调用

    应用场景:工具类

    注意:该类只是纯粹的功能,就可以把该类变为工具类,直接用类名调用静态方法即可

  1. 静态代码块:

    应用场景:初始化数据(功能和构造方法类似)
    构造方法 vs 代码块 vs 静态代码块

构造方法:创建对象时调用,初始化数据(成员变量、静态变量)

代码块:创建对象时优先于构造方法调用,初始化数据(成员变量、静态变量)

静态代码块:字节码文件加载到方法区时调用,初始化数据(静态变量
A类

package com.dream.test02;

public class A {
	
	
	//构造方法在创建对象时被调用
	public A() {
		System.out.println("A类的无参构造");
	}
	
	//代码块在创建对象时优先于构造方法被调用
	{
		System.out.println("A类的代码块");
	}
	
	//静态代码块在A.class加载到方法区时被调用
	static{
		System.out.println("A类的静态代码块");
	}

}

测试类

package com.dream.test02;

public class Test01 {

	public static void main(String[] args) {
		
		
		A a1 = new A();
		A a2 = new A();
		
		
	}
}

二、继承

含义:子类继承父类的属性和方法

语法:public class 子类 extends 父类{}

注意:一个类只能继承另一个类(单继承)

好处:减少代码的冗余

应用场景:多个类,拥有相同的属性和方法,就可以把这些相同的属性和方法抽取到父类中

人类

package com.dream.test03;

public class Person {
	
	String name;
	char sex;
	int age;
	
	public void eat(){
		System.out.println("吃饭饭");
	}
	
	public void sleep(){
		System.out.println("睡觉觉");
	}

}

中国人类

package com.dream.test03;

//			 子类		  继承		  父类
public class Chinese extends Person{

	String chineseId;
	
	public void playTaiJi(){
		System.out.println("打太极");
	}
}

日本人类

package com.dream.test03;

public class Japanese extends Person{

	String japaneseId;
	
	public void playVedio(){
		System.out.println("拍电影");
	}
}

测试类

package com.dream.test03;

public class Test01 {
	
	public static void main(String[] args) {
		
		
		Chinese c = new Chinese();
		c.name = "杨晨";
		c.sex = '男';
		c.age = 18;
		System.out.println(c.name);
		System.out.println(c.sex);
		System.out.println(c.age);
		c.eat();
		c.sleep();
		c.chineseId = "123456789";
		System.out.println(c.chineseId);
		c.playTaiJi();
		
		Japanese j = new Japanese();
		j.name = "麻生希";
		j.sex = '女';
		j.age = 23;
		System.out.println(j.name);
		System.out.println(j.sex);
		System.out.println(j.age);
		j.eat();
		j.sleep();
		j.japaneseId = "987654321";
		System.out.println(j.japaneseId);
		j.playVedio();
		
	}

}

三、深入继承
  1. 子类可以继承父类的私有化属性和方法吗?

    可以的

  2. 创建子类对象,会调用父类构造方法吗?

    会

  3. 创建子类对象,调用父类构造方法的目的?

    在子类对象中开辟空间,用于存储父类的属性

  4. 创建子类对象,会创建父类对象吗?

    不会

  5. 创建子类对象,先调用父类构造方法还是子类构造方法?

    先调用子类构造方法

人类

package com.dream.test04;

public class Person {
	
	private String name;
	private char sex;
	private int age;
	
	public Person() {
		System.out.println("Person类的构造方法");
	}
	
	public Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void eat(){
		System.out.println("吃饭饭");
	}
	
	public void sleep(){
		System.out.println("睡觉觉");
	}
	
	private void fatherMethod01(){
		System.out.println("父类私有化方法");
	}
	
	public void fatherMethod02(){
		fatherMethod01();
	}

}

中国人类

package com.dream.test04;

//			 子类		  继承		  父类
public class Chinese extends Person{

	String chineseId;
	
	public Chinese() {
		//super();//默认实现调用父类的无参构造
		System.out.println("Chinese类的构造方法");
	}
	
	public void playTaiJi(){
		System.out.println("打太极");
	}
}

日本人类

package com.dream.test04;

public class Japanese extends Person{

	String japaneseId;
	
	public Japanese() {
	}
	
	public void playVedio(){
		System.out.println("拍电影");
	}
}

测试类

package com.dream.test04;

public class Test01 {
	
	public static void main(String[] args) {
		
		
		Chinese c = new Chinese();
		c.setName("杨晨");
		System.out.println(c.getName());
		
		c.fatherMethod02();
	}

}

四、super

含义:父类

作用:

  1. super.属性:在子类中,调用父类非私有化属性

  2. super.方法:在子类中,调用父类非私有化方法

  3. super():在子类中,调用父类非私有化构造方法
    人类

package com.dream.test05;

public class Person {
	
	private String name;
	private char sex;
	private int age;
	
	public Person() {
	}
	
	public Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void eat(){
		System.out.println(this.name + "吃饭饭");
	}
	
	public void sleep(){
		System.out.println(this.name + "睡觉觉");
	}
	
}

中国人类

package com.dream.test05;

public class Chinese extends Person{

	private String chineseId;
	
	public Chinese() {
	}
	
	public Chinese(String chineseId) {
		this.chineseId = chineseId;
	}
	
	public Chinese(String name,char sex,int age,String chineseId){
		//调用父类的非私有化构造方法
		super(name, sex, age);
		this.chineseId = chineseId;
	}

	public void playTaiJi(){
		//调用父类的非私有化方法
		System.out.println(super.getName() + "打太极");
	}
}

日本人类

package com.dream.test05;

public class Japanese extends Person{

	private String japaneseId;
	
	public Japanese() {
	}
	
	public Japanese(String name, char sex, int age, String japaneseId) {
		super(name, sex, age);
		this.japaneseId = japaneseId;
	}

	public void playVedio(){
		System.out.println(super.getName() + "拍电影");
	}
}

测试类

package com.dream.test05;

public class Test01 {
	
	public static void main(String[] args) {
		
		
		Chinese c = new Chinese("大牛", '男', 18, "123456789");
		
		c.eat();
		c.playTaiJi();
		
	}

}

五、重写

含义:将父类里的方法,在子类中重新写一遍

应用场景:父类方法不满足子类需求时,考虑使用重写

条件:

  1. 在子类中

  2. 返回值、方法名、参数列表必须和父类重写的方法一致

  3. 访问修饰符不能比父类更严格

人类

package com.dream.test06;

public class Person {
	
	private String name;
	private char sex;
	private int age;
	
	public Person() {
	}

	public Person(String name, char sex, int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void eat(){
		System.out.println(this.name + "吃饭饭");
	}
	
	public void sleep(){
		System.out.println(this.name + "睡觉觉");
	}
	
}

中国人类

package com.dream.test06;

public class Chinese extends Person{

	private String chineseId;
	
	public Chinese() {
	}

	public Chinese(String name, char sex, int age, String chineseId) {
		super(name, sex, age);
		this.chineseId = chineseId;
	}

	public String getChineseId() {
		return chineseId;
	}

	public void setChineseId(String chineseId) {
		this.chineseId = chineseId;
	}
	
	public void playTaiJi(){
		System.out.println(super.getName() + "打太极");
	}
	
	//@Override注解:重写
	//注释:给程序员解释的
	//注解:既给程序员解释,也给程序解释
	@Override
	public void eat() {
		System.out.println(super.getName() + "吃山珍海味");
	}
}

日本人类

package com.dream.test06;

public class Japanese extends Person{

	private String japaneseId;
	
	public Japanese() {
	}

	public Japanese(String name, char sex, int age, String japaneseId) {
		super(name, sex, age);
		this.japaneseId = japaneseId;
	}

	public String getJapaneseId() {
		return japaneseId;
	}

	public void setJapaneseId(String japaneseId) {
		this.japaneseId = japaneseId;
	}
	
	public void playVedio(){
		System.out.println(super.getName() + "拍电影");
	}
	
	@Override
	public void eat() {
		System.out.println(super.getName() + "吃马赛克");
	}
}

测试类

package com.dream.test06;

public class Test01 {
	
	public static void main(String[] args) {
		
		
		Chinese c = new Chinese("杨晨", '男', 18, "123456789");
		c.eat();
		
		Japanese j = new Japanese("波多野结衣", '女', 23, "987654321");
		j.eat();
	}

}

六、访问修饰符
访问修饰符本类本包同包子类不同包不同包子类
privateok
default(默认权限)okokok
protectedokokokok
publicokokokokok
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号