java/day08

本文详细介绍了Java中的super关键字、方法重写、继承的用法,包括成员变量、构造方法以及静态关键字static的使用。同时讲解了静态代码块和final关键字的应用,并探讨了类与对象的关系、封装的好处以及overload和override的区别。通过实例展示了如何在子类中调用父类的方法和资源,以及如何实现方法的重写和扩展功能。
摘要由CSDN通过智能技术生成

一,super关键字
–1,概述
super表示父类对象的一个引用
在子类中用,用来调用父类的功能
和this一样,如果出现在了构造方法里,必须是第一条语句
二,方法重写
–1,概述
英文名Override,发生在父子类里的关系
子类继承了父类以后,可以使用父类的所有功能,如果想改-方法重写
语法要求:要有足够的权限(子类的权限要>=父类原来的权限)
子类的方法签名/声明 必须和父类 一样
访问权限:public > protected > default > private
三,继承中的用法
–1,成员变量
package cn.tedu.oop;
//测试 继承里的成员变量
public class Test1 {
public static void main(String[] args) {
//TODO 创建对象测试
new Zi().show();
//对属性的操作:要么打印要么赋值
}
}
class Fu{
String name = “jack”;
}
class Zi extends Fu{
String name = “rose”;
int age = 20 ;//成员变量
public void show() {
int age = 10 ;//局部变量
System.out.println(age);//10,就近原则,优先使用局部变量
System.out.println(this.age);//20,this调用了本类的成员变量
System.out.println(name);//使用了子类的资源rose
//1,super代表父类对象的引用。Fu super = new Fu();
//2,super用在子类中,调用父类的功能
System.out.println(super.name);//使用了父类的资源jack
}

	}

--2,方法
	package cn.tedu.oop;
	//测试 继承里的方法
	//总结:
	//1,子类:可以使用继承自父类的所有方法(除了private的)
		//还可以 扩展自己的特有的方法
		//还可以 修改继承来的方法--方法的重写
		//语法要求:有足够的权限(>=) + 子类的方法声明/签名 必须和父类一样
	//2,方法重写,影响了子类的方法体。但是对父类不能产生影响。
	//3,开发时的原则:OCP开闭原则 -- 关闭源码修改 -- 开放功能扩展
	public class Test2 {
		public static void main(String[] args) {
			Zi2 z = new Zi2();
			z.eat();//重写前,使用了父类的。重写后,使用了子类的
	//		z.play();//是父类的私有资源,只能在父类中使用
	//		z.coding();//使用了子类扩展的
		}
	}
	class Fu2{
		public void eat() {
			System.out.println("啥都吃");
		}
		private void play() {
			System.out.println("啥都玩");
		}
	}
	//1,子类继承父类后,可以使用父类的所有方法(除了private的)
	class Zi2 extends Fu2{
		//3,子类除了能用父类的,还可以自己扩展,还可以改--方法重写
		//要求:子类要有足够的权限 + 方法声明和父类一样
		 public void eat() {
	//4,验证:重写后,对原来父类的功能,有影响吗?--没有,遵循OCP原则
	//		 super.eat();
			 System.out.println("吃 猪肉");
		 }
		//2,子类除了能用父类的,还可以自己扩展
		public void coding() {
			System.out.println("敲代码");
		}
	}

--3,构造方法
	package cn.tedu.oop;
	//测试 继承里的构造方法
	//总结:
	//1,构造方法的作用是:用来灵活的new
	//2,继承后,子类构造方法里会隐藏super()--意思是会自动调用父类的无参构造
	//3,如果父类没给无参构造,子类,只能调用父类的含参 构造
	public class Test3 {
		public static void main(String[] args) {
			new Zi3();
		}
	}
	class Fu3{
		//TODO
		public Fu3() {
			System.out.println(1);
		}
		public Fu3(int a) {
			System.out.println(100);
		}
	}
	class Zi3 extends Fu3{
		public Zi3() {
			//1,构造方法里,隐藏了super(),会自动调用父类的 无参的 构造方法!
			//3,super关键字,如果出现在了构造方法里,必须是第一条语句
	//		super();
			super(666);//2,触发的是父类的  含参 构造方法
			System.out.println(2);
		}
	}
--4,继承的练习
	package cn.tedu.oop;
	//练习 继承
	public class Test4 {
		public static void main(String[] args) {
			Demo d = new Demo();
			//重写前cn.tedu.oop.Demo@15db9742,重写后abc
			System.out.println(d.toString());
		}
	}
	class Demo extends Object{
		//重写
		public String toString() {
			return "abc";
		}
	}
	class Fu4{
		//TODO Constructors..
		public Fu4(int a) {//2,如果只提供含参构造,此时,无参构造就没了!
			System.out.println(1);
		}
		//TODO Fields..
		int age = 10;
		//TODO Methods..
		public void eat() {
			System.out.println(1);
		}
	}
	class Zi4 extends Fu4{
		//TODO 5,重写:有权限+方法声明和父类一样
		public void eat() {
			System.out.println(100);
		}
		public Zi4() {
	//		super();//1,是隐藏着的,会自动调用父类的无参构造
			super(100);//3,只能调用父类的含参构造
		}
		public void show() {
			//4,通过super调用了父类的成员变量
			System.out.println(super.age);
		}
		
	}

四,static关键字
–1,测试
package cn.tedu.oop;
//测试 static关键字
public class Test5 {
public static void main(String[] args) {
//TODO 创建对象测试
Person p = new Person();
p.eat();
System.out.println( p.age );
p.sleep();
System.out.println( p.name );
//1,static的资源,可以通过对象访问+类名访问
Person.sleep();
System.out.println( Person.name );
Person p1 = new Person();
p1.name=“快乐星球”;
Person p2 = new Person();
System.out.println(p2.name);
Person p3 = new Person();
System.out.println(p3.name);
Person p4 = new Person();
System.out.println(p4.name);
}
}
class Person{
//TODO 普通资源
int age = 10;
public void eat() {
//TODO 4.2,普通资源可以调用所有资源(普通的/静态的)
System.out.println(1);
System.out.println(name);
}
//TODO 静态资源
//1,static 可以修饰 成员变量和方法
//2,static资源优先于对象的加载
//3,static资源是共享的,可以直接被类名调用
static String name = “tony”;
static public void sleep() {
//TODO 4,静态资源调用普通资源?–不能直接调用,必须修饰成static的
// System.out.println(age);
//TODO 4.1,静态资源调用静态资源?–可以
System.out.println(name);
System.out.println(1);
}
}
五,静态代码块
–1,概述
也拥有static关键字的所有特点
静态代码块 在 成员位置 static{…}
静态代码块 用于 项目的初始化
–2,测试
package cn.tedu.oop;
//测试 static代码块
public class Test6 {
public static void main(String[] args) {
new Student();//
new Student();//
new Student();//
new Student();//
new Student();//
//执行顺序:
//当类加载时,执行静态代码块
//当new/实例化时,执行 构造代码块和构造方法
//当方法被调用时,执行 局部代码块
}
}
class Student{
//TODO 静态代码块:在成员位置+用来初始化项目+类加载时触发
static {
System.out.println(“静态代码块”);
}
//TODO Constructor:在成员位置+用来new
public Student() {
System.out.println(“构造方法”);
}
//TODO 构造代码块:在成员位置+用来提取构造方法里的共性+new时触发
{
System.out.println(“构造代码块”);
}
//TODO 局部代码块:在局部位置+用来控制变量的作用范围+调用方法时
public void show() {
{
System.out.println(“局部代码块”);
}
}
}

六,final关键字
–1,代码
package cn.tedu.oop;
//测试 final关键字–可以修饰类/方法/变量
public class Test7 {
public static void main(String[] args) {
Zi5 z = new Zi5();
z.eat();
// z.name = “rose”;//修改属性的值
System.out.println( z.name );//打印属性的值
}
}
//1,final修饰的类,不能被继承
//The type Zi5 cannot subclass the final class Fu5
//final class Fu5{
class Fu5 {
//2,final修饰的常量,只能继承,值不能被修改
//The final field Fu5.name cannot be assigned
final String name= “jack”;
//3,final修饰的方法,只能继承,不能重写
final public void eat() {
System.out.println(1);
}
}
class Zi5 extends Fu5{
// //重写:
// public void eat() {
// System.out.println(100);
// }
}

扩展:–面试题
–1,类和对象的关系
–2,封装的好处:提高了程序的安全性
–3,this和super的区别
this代表的是本类对象的一个引用,可以调用一个类的资源
super代表的是父类的对象的一个引用,在子类中可以调用父类的资源
如果是在构造方法里,this和super都必须是第一条语句
–4,overload和override的区别
overload是重载,是一个里的 方法名相同,但是参数列表不同 的现象。
override是重写,是继承后的 子类想要修改父类原有功能 的现象。
重载是为了体现出程序的灵活性
重写就是为了改父类的功能
重写要求的是:子类的方法声明/签名 必须和父类一样 + 子类有要有足够的权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值