今天的内容
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();
}
}
列一个纲要: