• 【第六章 final、abstract】


    第六章 final、abstract、代码块

    1.final:最终的
    ①final可以用来修饰的结构:类、方法、变量;
    ②final 用来修饰类:此类不能被其他类所继承,比如:String类、System类、StringBuffer类;
    ③final 用来修饰方法:表明此方法不可以被重写,比如Object中的getClass();
    ④final 用来修饰变量:此时的“变量”就称为一个常量
    a.final 修饰属性;可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化;
    b.final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量,当我们调用此方法时,给常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值;
    c.static final :用来修饰属性:全局常量。
    2.abstract:抽象的
    ①abstract用来修饰的结构:类,方法;
    ②abstract修饰类:抽象类
    a.此类不能实例化;
    b.抽象类中一定有构造器,便于子类实例化时使用(涉及、子类对象实例化的全过程);
    c.开发中,都会提供抽象类的子类,让子类对象完成相关的操作。
    ③abstract修饰方法:抽象方法
    a.抽象方法只有方法的声明,没有方法体;
    b.包含抽象方法的类一定是一个抽象类;反之,抽象类中可以没有抽象方法。
    c.若子类重写了父类中的所有抽象方法后,此子类方可实例化;若子类没有重写父类中的所有抽象方法后,此子类也是个抽象类,需要abstract修饰。
    ④abstract不能用来修饰:属性,构造器等结构。
    ⑤abstract不能用来修饰私有方法,静态方法,final的方法、final的类

    package day6;
    /**
     * @author 26312
     */
    public class AbstractTest {
    	public static void main(String[] args) {
    	}
    }
    abstract class Creature{
    	public abstract void breath();
    }
    abstract class Person1 extends Creature{
    	String name;
    	int age;
    	public Person1() {
    	}
    	public Person1(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	public abstract void eat();
    	public void walk() {
    		System.out.println("人走路");
    	}
    }
     class Student extends Person1{
    	 public Student(String name,int age) {
    		super(name,age);
    	}
    	 public void eat() {
    		System.out.println("学生应该多吃有营养的事物!");
    	}
    	 public void breath() {
    		System.out.println("学生应该呼吸新鲜的没有雾霾的空气");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3.类的成员之四:代码块
    ①代码块的作用:用来初始化类、对象;
    ②代码块如果有修饰,只能使用static。
    ③静态代码块VS非静态代码块

    package day6;
    /**
     * @author 26312
     */
    public class BlockTest {
    	public static void main(String[] args) {
    		String desc= Person.desc;
    		System.out.println(desc);
    		Person person = new Person();
    		Person person2 = new Person();
    		System.out.println(person.age);
    		Person.info();
    	}
    }
    class Person{
    	//属性
    	String name;
    	int age;
    	static String desc="我是一个人!";
    	//构造器
    	public Person() {
    	}
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	//static的代码块
    	static{
    		System.out.println("hello,static block");
    		desc="我是一个爱学习的人!";
    	}
    	//非static的代码块
    	{
    		System.out.println("hello,block");
    		age=1;
    	}
    	//方法
    	public void eat() {
    		System.out.println("吃饭");
    	}
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    	public static void info() {
    		System.out.println("我是一个快乐的人!");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    ④静态代码块
    a.内部可以有输出语句;
    b.随着类的加载而执行,而且只执行一次;
    c.作用:初始化类的信息;
    d.如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行;
    e.静态代码块的执行要优先于非静态的代码块;
    f.静态代码块只能调用静态的属性,静态的方法,不能调用非静态的结构。
    ⑤非静态代码块
    a.内部可以有输出语句;
    b.随着对象的创建而执行;
    c.每创建一个对象,就执行一次非静态代码块;
    d.作用:可以在创建对象时,对对象的属性等初始化;
    e.如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行;
    f.非静态代码块可以调用静态的属性,静态的方法,或非静态的属性,非静态的方法。

  • 相关阅读:
    ML:置信区间的简介(精密度/准确度/精确度的三者区别及其关系)、使用方法、案例应用之详细攻略
    String
    关于电影的HTML网页设计-威海影视网站首页-电影主题HTM5网页设计作业成品
    (附源码)ssm经济信息门户网站 毕业设计 141634
    Linux常用命令(超详细)
    【vue】vue前端、生产(线上)环境请求unicloud云服务空间axios报错
    23设计模式之 --------- 什么是设计模式?
    数字孪生+燃气管理,开启智慧燃气管理新模式
    【无标题】数字ic设计|ic芯片设计全流程
    QDebug 日志输出的浏览器
  • 原文地址:https://blog.csdn.net/qq_43742813/article/details/126691813