oop回顾 final
来源:互联网 发布:模拟和网络监控的区别 编辑:程序博客网 时间:2024/06/05 19:48
构造函数 没有返回值 如果有返回值的构造函数 就是假的 其实不是构造函数 而是普通成员函数
public void Car(){
}
从命名中 函数一般小写字母开头 变量大写字母开头 这里的命名不符合规划
public Car car(){A
Car c = new Car();
return c;
}
//返回值 Car是引用类型 从 Car c=new Car() 可以看出
--------------------------------------------------------------------------------------------------------
return; 没有返回值的返回 不是返回null
---------------------------------------------------------------------
public Car(){
new Car();
}
//递归了,因为 创建对象 new Car(); 然后一直调用自己 递归
---------------------------------------------------------------------------
构造函数只能通过new 来调
Car c = new Car("white"):
不可以是先创建一个对象 c 然后 c.Car("white") // 编译不通过
除非 定义了 一个
public Car Car(String color){
this.color = color;
Car c = new Car();
return c;
}
//以上用法很奇怪 只是讲解用的
---------------------------------------------
构造函数之间相互访问 this
---------------------------------------------------
win文件不区分命名大小写
而java里面区分大小写
class car extends Car{
}
//编译可以通过 但是 文件没有找到小写的car.class
------------------------------------------------------
main:
getBrand()
class Benz extends Car{
private static String BRAND = "BENZ";
public static String getBrand(){
return Brand; //静态方法里面不能this, this是指向对象自己的指针,前提得是个对象 而静态方法没有对象,它在方法区里面
}
}
-----------------------------------------------------------------------------------------
overwrite 覆盖 复写
class ClassDemo2{
public static void main(String[] args){
Son s1 = new Son();
s1.eat();
s1.asset = 1000 ; //私有就会报错
s1.setAsset(1000);
}
}
class Father{
String name;
private int asset;
public void eat(){
print("wash hand");
}
public void walk(){
print("walk");
}
public void getAsset(){return this.asset;
}
public void setAsset(){
this.asset = asset;
}
}
class Son extends Father{
public void eat(){
super.eat();
print("dusche");
}
public void run(){
//this.walk(); 没问题
super.walk(); 也没问题 调用 this 或者 super 没区别
}
}
-----------------------------------------------------------
super常用来方法overwrite
如果父类方法是private 子类不能继承
但是如果子类出现同名的 只能说明是另一个函数 不是继承
---------------------------------------------------------
overwrite 子类方法权限 一定要大于等于父类方法权限 (我猜 比如 父是public 子类不能private 儿子把权限缩小了)
静态只能覆盖静态 比如父 public static void walk 那么子类 也只能 public staic void walk(父类非静态 子类同样也无法覆盖)
overwrite:
1.静态覆盖静态 非静态覆盖非静态 静态性约束一致
2.权限放大 不能缩小
----------------------------------------------------------------
class ClassDemo3{
main:
Jing8 d = new Jing8();
d.run();
}
class Animal{
String category;
public Animal(){
System.out.println("new Animal()");
}
public void run(){
print("run()");
}
}
class Dog extends Animal{
String color;
public Dog(){
System.out.println("new Dog()");
}
}
class Jing8 extends Dog{
String blood;
public Jing8(){
System.out.println("new Jing8()");
}
}
result: new Animal()
new Dog()
new Jing8()
run...
构造函数 一层一层super上去
子构造函数会默认访问父的构造函数
每个构造函数都有一条默认的语句super()
如果父有参数的构造函数,那么一定要父写空的构造函数 不然子类是空的调用就会有问题 或者子类显式调用 super("kkk") 非空
因为 子类中
public Dog(){
//super(); //省略不写 调用父空构造 或者是this();
println("Dog()");
}
-----------------------------------------------------------
-------------------------------------------------------------------
jing8 内部可以访问 继承的对象 dog animal
但是外部不能访问继承的对象
----------------------------------------------------------------
static Jing8 d=new Jing8();
d 在method area 里面
d是一个引用 指针
静态这个东西跟对象无关 只跟类有关 周期很长
对象在heap
-------------------------------------------------------------
-----------------------------------------------------------------------
final
1.最终的
2.修饰类,不能被继承(final Dog 那么Jing8 就不能继承)
3.修饰方法就不能覆盖(public final void run() Animal d.run(); Jing8可以调run方法的 只是jing8不能复写而已)
4.修饰变量不能修改,只能赋值,常量(final String blood='A')
--------------------------------------------------------
类的成员
1.成员变量
2.成员函数
3.构造代码块
4.静态代码块
------------------------------------------------
class InnerClassDemo1{
public static void main(String[] args){
Benz benz = new Benz();
benz.run();
}
}
class Benz{
String color;
int tires;
public void run(){
Engine e = new Engine();;
e.fire("key001");
System.out.prinln("run...");
}
//
class Engine{
public void fire(String key){
print(key);
System.out.println("fire...");
}
}
}
-------------------------------------------------
内部类
1.定义在类内部的类,称为内部类
2.内部类可以在类成员里头
编译时产生的类: 外部类$内部类名 如 Benz$Engine.class
3.还可以定义在方法里头,Benz$1Engine
4.内部访问局部变量,不能局部变量进行重新复制(如下例子解释)
Benz:
public void run(){
int key; //系统自动加final 给 inner class 用
class Engine{
public void fire(){
// key=888; 编译通不过
print(key);
System.out.println("fire...");
}
Engine e = new Engine();;
e.fire();
System.out.prinln("run...");
}
内部类只能访问外部 被final修饰的局部变量(java8好像不满足了)这里的key 在java8一下版本 要用final修饰 否则错误 java8 中默认已经加了final
可以通过 在inner class里面 改变key的值 可以发现 编译错误
---------------------------------------------------------
- oop回顾 final
- OOP概念回顾(一)
- Java final的回顾
- static 和 final 回顾
- 局部内部类+外部类访问final变量+final 回顾
- Java基础回顾_深入OOP常见错误精髓
- php面向对象(OOP)—final关键字
- OOP
- OOP
- OOP:
- OOP
- OOP
- OOP
- OOP
- .OOP
- oop
- OOP
- OOP
- JavaScript中callee关键字
- <transactionManager>与<datasource>元素
- 初探opencv:数据结构Mat
- 第三天日志
- 最大利益:Maximum Profit(复杂度)
- oop回顾 final
- Unity+Behavior Tree行为树 Behavior Designer TaskList介绍二
- linux 学习笔记(一)——文件操作
- JavaScript中函数调用
- 第5章 开始Unity Shader 学习之旅
- hdu 2586 How far away ?
- 【踩坑后总结】如何在Windows下安装配置MongoDB
- spring创建策略模式的两种方式(xml配置和纯注解)
- JavaScript的全局变量和局部变量