Java基础_11方法的重载_super关键字_static关键字_final关键字_抽象类

本文详细介绍了Java中的方法重载、super关键字的使用、static关键字的特性(静态变量、方法和代码块)、抽象类的概念及其应用,以及final关键字在成员变量、方法和类上的作用。
摘要由CSDN通过智能技术生成

今天的内容

1.重载【overload】

2.super关键字

3.static 关键字

4.抽象类

5.final关键字

1.重载【overload】

在Java中,同一个类中有很多方法,方法的名字是可以一样的,但是参数列表不一样。那么这些方法就是方法的重载

package com.qf.b_overload;

public class Person {
	public void test () {
		System.out.println("嘻嘻 test");
	}
	public void test (int a) {
		System.out.println(a);
	}
	//方法重载和修饰符无关
	void test (String name) {
		System.out.println(name);
	} 
	//方法的重载和返回值无关的
	public int test (int a, int b) {
		return a + b;
	}
}

总结:
1.方法的重载必须写在同一个类中
2.方法的名字一定是一样的
3.方法的参数一定不一样
4.方法的返回值和修饰符可以一样也可以不一样
5.无参构造和有参构造也是方法的重载

面试题:

方法的重写和重载的区别

2.super关键字【鸡肋】

食之无味弃之可惜

this:

​ 代表是当前对象

​ 在当前类中书写 一个类

​ 1.可以调用属性和方法

​ 2.可以调用构造方法

super:

​ 代表父类的对象

​ 必须在子类中写,代表父类的对象

​ 1.可以调用父类的属性和方法(用)

​ 2.可以调用父类的构造方法

package com.qf.c_super;

class Father {
	String name;
	int age;
	public Father () {
		System.out.println("嘻嘻父类的无参构造方案");
	}
	public Father (String name, int age) {
		System.out.println("嘻嘻父类的有参构造方案");
	}
	public void eat () {
		System.out.println("嘻嘻要吃窝窝头了啊");
	}
}
class Son extends Father {
	
	public Son () {
		//调用父类的有参的构造方法  默认就是   不写也会调用父类的无参的构造方法
		super("哈哈", 12);
	}
	public void test () {
		//super调用属性和方法
		super.name = "狗蛋";
		super.age = 12;
		super.eat();
	}
	@Override
	public void eat() {
		System.out.println("哈哈要吃山珍海味了啊");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		Son son = new Son();
		son.test();
		son.eat();
	}
}

3.static 关键字

静态的意思

static 修饰的东西和对象无关的

3.1生活中静态的东西

公共厕所

饮水机

不属于某一个对象,但是对象可以用的

即使你不实例化对象,也能用

3.2Java中静态的

1.修饰变量 静态变量

2.修饰方法 静态方法

3.修饰代码块 静态代码块

3.2.1使用static修饰变量 叫 静态变量

语法格式:

权限修饰符 static 数据类型 变量名字;

在main主函数中调用静态变量的时候

类.静态属性
package com.qf.d_static;

class Person{
	String name;
	int age;
	static String country;//国家变量
}
public class Demo1 {
	public static void main(String[] args) {
		Person.country  = "PRC";
		System.out.println(Person.country);
		Person person = new Person();
		//The static field Person.country should be accessed in a static way
		System.out.println(person.country);
		person.country = "中华人民共和国";
		System.out.println(person.country);//中华人民共和国
		System.out.println(Person.country);//中华人民共和国
		
		Person person2 = new Person();
		System.out.println(person2.country);
		//注意:以后碰到静态的变量的时候,一定要用类名.静态属性即可
	}
}

在这里插入图片描述

总结:

​ 1.使用static修饰的变量,叫静态变量。当还没有对象的时候,只要加载类,就会在静态区域开辟

空间存储咱们的静态变量。

3.2.2使用static修饰方法叫静态方法

语法格式:

public static void 方法的名字() {
    
}

面试题:静态方法中能不能使用非静态的成员变量和调用非静态的成员方法
不能。 为啥?静态方法早于对象的创建。this代表当前对象

package com.qf.d_static;

class Dog {
	static String name;
	public void eat () {
		this.name = "狗蛋";
		System.out.println("吃饭");
	}
	//面试题:静态方法中能不能使用非静态的成员变量和调用非静态的成员方法
	//不能。 为啥?静态方法早于对象的创建。this代表当前对象
	public static void sleep() {
		//this.name = "嘻嘻";
		Dog.name = "休息";
		//eat();
		System.out.println("睡觉。。。");
	}
}
public class Demo2 {
	public static void main(String[] args) {
		//类.静态方法 
		Dog.sleep();
	}
	
	
}

3.2.3使用static修饰的代码块叫静态代码块

代码块:

{
	语句体
}

静态代码块:

static {
	语句体
}

在类中写了静态代码块,只要这个类被加载,静态代码块一定执行,早于对象创建。

package com.qf.d_static;


class Cat {
	public Cat () {
		System.out.println("嘻嘻 我是无参构造方法");
	}
	{
		System.out.println("代码块也要执行的哦");
	}
	//static修饰的代码块,只要类被加载就一定执行
	static {
		System.out.println("这个是静态代码块");
	}
	
	
}
public class Demo4 {
	public static void main(String[] args) throws ClassNotFoundException {
		//写下面这段代码的意思是为了让Cat这类加载jvm
		//Class.forName("com.qf.d_static.Cat");
		Cat cat = new Cat();
	}
}

执行顺序: 静态代码块-》代码块-》构造方法

总结:

1.静态属性
		类名.属性  赋值和取值即可
2.静态方法
		类名.方法  直接调用
3.静态代码块
		只要类被加载,然后静态代码一定执行的

4.抽象类

在面向对象,所有对象都是可以通过类来描述(创建)

反过来说,并不是所有的类可以创建对象的。如果一个类中没有

足够的信息描述一个对象的时候,那么这个类就是抽象类

4.1抽象类的声明

在Java中使用abstract修饰的类叫抽象类

语法格式:

abstract class 类{
	属性
	方法
	抽象方法
}

入门案例

package com.qf.e_abstract;

abstract class Person {
	public void test () {
		System.out.println("你是普通的方法");
	}
	//抽象方法的
	//如果一个类中没有

//足够的信息描述一个对象的时候,那么这个类就是抽象类
	public abstract void sleep();
	
	
}
class Man extends Person {

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("睡吧");
	}
	
}
public class Demo1 {
	public static void main(String[] args) {
		Man man = new Man();
		man.test();
		man.sleep();
	}
}

4.2抽象类的细节

1.如果一个类中有抽象的方法,那么这个类一定是抽象类。换句话说:抽象方法必须定义在抽象类

2.抽象的方法一定是没有方法体的方法,并且使用abstract修饰的

3.抽象类不能被实例化

4.由于抽象类无法被实例化,咱们只能新建一个类去继承此抽象类,然后才能使用抽象类中的方法

5.一定要重写抽象类中的抽象方法。普通方法可以重写也可以不重写

6.一个抽象类可以去继承另外一个抽象类吗? 可以

但是在继承的时候在非抽象的类中一定要重写抽象方法的。

7.抽象类能不能继承一个非抽象的类? 可以的

package com.qf.e_abstract;

class Animal {
	public void drink () {
		System.out.println("喝水");
	}
}
abstract class Monkey extends Animal{
	public abstract void play();
}
abstract class People extends Monkey{
	//没有方法体,就是没有那个大括号的!!!
	public abstract void eat();
	
	//普通方法
	public void  sleep () {
		System.out.println("人睡觉睡4个小时");
	}
}
class Child extends People {

	@Override
	public void eat() {
		System.out.println("小孩吃糖");
	}
	@Override
	public void sleep() {
		System.out.println("小孩睡觉9个小时");
	}
	//
	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("玩玩具");
	}
	
}
public class Demo2 {
	public static void main(String[] args) {
		//不能被实例化 真愁人 那咋办?
		//People people = new People();
	}
}

4.3案例

抽象类:

​ Animal :

​ eat();抽象的方法

普通类:

​ Dog

​ Cat

package com.qf.e_abstract;

abstract class Pet {//宠物类  抽象的类
	public abstract void eat();
}
class Dog extends Pet{
	@Override
	public void eat() {
		System.out.println("狗吃大骨头");
	}
}
class Cat extends Pet {
	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}
}
public class Demo3 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.eat();
		Cat cat = new Cat();
		cat.eat();
	}
}

5.final关键字

final: 字面意思 最终的最后的

用法:

1.final可以修饰成员变量
	使用final修饰的成员变量,一定要赋值。一旦赋值成功,无法修改。
2.final可以修饰局部变量
	可以先不赋值,然后使用的时候再赋值。一旦赋值成功 无法修改。
3.final可以修饰成员方法
	不能被重写
4.final可以修饰一个对象的引用
	修饰以后无法修改
5.final可以修饰一个类
	修饰的类无法被继承
package com.qf.f_final;

final class Person {
	final String name = "狗蛋";//name 最终的值是狗蛋
	int age;
	
	public void test () {
		final int i;//局部变量: 用的时候个要赋值
		i = 20;
		//i = 30; 局部变量不能再被赋值了
		System.out.println(i);
	}
	final public  void eat () {
		System.out.println("人类再吃");
	}
}

//class Man extends Person{
//	//final 修饰的方法无法被重写
	@Override
	public void eat() {
		
	}
//}
public class Demo1 {
	public static void main(String[] args) {
		final Person person1 = new Person();
		//person.name = "张三";
		//person.test();
		System.out.println(person1);//com.qf.f_final.Person@15db9742
		Person person2 = new Person();
		System.out.println(person2);//com.qf.f_final.Person@6d06d69c
//		person1 = person2;//person2赋值给了person1
//		System.out.println(person1);//com.qf.f_final.Person@6d06d69c
		
		
	}
}

package com.qf.g_zongjie;

abstract class Moneky {
	public abstract void drink();
}
class Person extends Moneky{
	private String name;
	private int age;
	public final char sex = '男';
	public static double weight;
	public Person () {
		
	}
	public Person (String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public final void eat () {
		System.out.println("吃饭");
	}
	public static void sleep () {
		System.out.println("静态方法");
	}
	@Override
	public void drink() {
		// TODO Auto-generated method stub
		System.out.println("喝酒");
	}
	
}
class Man extends Person{
//	public Man () {
//		super("狗蛋");
//	}
	@Override
	public void drink() {
		System.out.println("喝娃哈哈");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		Man man = new  Man();
		System.out.println(man.sex);
		man.setName("狗蛋");
		System.out.println(man.getName());
		man.drink();
		Man.weight = 78.9;
		Man.sleep();
	}
}

列一个纲要:

1.
2.
3.
4.

tic void sleep () {
System.out.println(“静态方法”);
}
@Override
public void drink() {
// TODO Auto-generated method stub
System.out.println(“喝酒”);
}

}
class Man extends Person{
// public Man () {
// super(“狗蛋”);
// }
@Override
public void drink() {
System.out.println(“喝娃哈哈”);
}
}
public class Demo1 {
public static void main(String[] args) {
Man man = new Man();
System.out.println(man.sex);
man.setName(“狗蛋”);
System.out.println(man.getName());
man.drink();
Man.weight = 78.9;
Man.sleep();
}
}


列一个纲要:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值